C++ 多线程: WaitForSingleObject(m_hEvent,INFINITE) ;
WaitForSingleObject(m_hEvent,INFINITE) ;
WaitForSingleObject(m_hEvent, INFINITE) 函數用於停止一個指定的執行緒,直到有信號量或信號通知接收。
m_hEvent 是一個句柄,指向一個事件對象,它可以是由 CreateEvent、OpenEvent 或其他函數創建的。
INFINITE 常量定義為 0xFFFFFFFF,表示無限等待。也就是說,執行緒將一直等待直到有信號量或信號通知接收,並且不會超時返回。
簡而言之,WaitForSingleObject(m_hEvent, INFINITE) 函數讓當前執行緒暫停,直到有信號量或信號通知接收為止
如何使用?
使用 WaitForSingleObject(m_hEvent, INFINITE) 函數的基本步驟如下:
- 在執行緒中創建或打開事件對象。可以使用 CreateEvent、OpenEvent 或其他函數創建或打開事件對象。例如: HANDLE hEvent = CreateEvent(NULL, TRUE, FALSE, TEXT("MyEvent"));
- 在執行緒中調用 WaitForSingleObject(hEvent, INFINITE) 函數。例如:
- WaitForSingleObject(hEvent, INFINITE);
- 在另一個執行緒或程序中發送信號量或信號通知給事件對象。可以使用 SetEvent、PulseEvent 或其他函數發送信號量或信號通知。例如:
- SetEvent(hEvent);
- 在第 3 步中發送信號量或信號通知後,WaitForSingleObject(hEvent, INFINITE) 函數將返回,執行緒將恢復執行。
注意:請務必在不再使用事件對象時記得關閉它。例如:
CloseHandle(hEvent);
简单范例:
#include <windows.h>
#include <iostream>using namespace std;HANDLE hEvent;// 執行緒函數
DWORD WINAPI ThreadFunc(LPVOID lpParam)
{cout << "Thread started. Waiting for event..." << endl;// 等待事件WaitForSingleObject(hEvent, INFINITE);cout << "Event received. Exiting thread..." << endl;return 0;
}int main()
{// 創建事件hEvent = CreateEvent(NULL, TRUE, FALSE, TEXT("MyEvent"));// 創建執行緒HANDLE hThread = CreateThread(NULL, 0, ThreadFunc, NULL, 0, NULL);cout << "Press Enter to send event..." << endl;cin.get();// 發送事件SetEvent(hEvent);// 等待執行緒結束WaitForSingleObject(hThread, INFINITE);// 關閉事件和執行緒句柄CloseHandle(hEvent);CloseHandle(hThread);return 0;
}
執行結果如下:
Press Enter to send event...
Thread started. Waiting for event...
Event received. Exiting thread...
在上面的範例中,主程序創建了一個事件對象,並創建了一個執行緒。在執行緒中,調用了 WaitForSingleObject(hEvent, INFINITE) 函數,執行緒暫停執行,等待事件。在主程序中,使用 SetEvent(hEvent) 函数發送事件,執行緒恢復執行,然後結束。
总结:
在使用 WaitForSingleObject(m_hEvent, INFINITE) 函數時,還有一些需要注意的地方。
- 事件對象必須先創建或打開,才能使用 WaitForSingleObject 函數等待。
- 在發送信號量或信號通知時,必須確保事件對象已被打開。
- 如果執行緒需要在多個事件對象之中進行等待,可以使用 WaitForMultipleObjects 函數。
- 如果需要在超時指定的時間內等待,可以使用 WaitForSingleObject(m_hEvent, dwMilliseconds) 函數。其中 dwMilliseconds 是等待的毫秒數。
- 如果執行緒需要等待的事件對象並不存在,WaitForSingleObject 函數將返回 WAIT_FAILED,並設置錯誤碼為 ERROR_INVALID_HANDLE。
- 如果需要等待的事件對象已經被關閉,WaitForSingleObject 函數將返回 WAIT_ABANDONED,並設置錯誤碼為 ERROR_INVALID_HANDLE。
C++ 多线程: WaitForSingleObject(m_hEvent,INFINITE) ;相关推荐
- MFC多线程 信号量CSemaphore 临界区与互斥 事件
CMutex, CCriticalSection用于对资源的互斥访问. CMutex可以跨进程使用, CCriticalSection只可以在进程内部使用. 创建CMutex需要更多的资源,只用于进程 ...
- 一种利用ADO连接池操作MySQL的解决方案(VC++)
VC++连接MySQL数据库 常用的方式有三种:ADO.mysql++,mysql API ; 本文只讲述ADO的连接方式. 为什么要使用连接池? 对于简单的数据库应用,完全可以先创建一个常连接(此连 ...
- windows 线程一般用法
目录 一. 线程说明 1. 概念 2. 线程与进程 3. 执行 二. windows下的各种线程 1. win32线程 (1) CreateThread (2) _beginthreadex (3 ...
- 多进程event通信
2019独角兽企业重金招聘Python工程师标准>>> #include "stdafx.h" #include <Windows.h>int mai ...
- WinCE的USB驱动开发
USB协议 http://www.usb.org/ Windows CE.NET 的USB系统软件分为两层: USB Client设备驱动程序和底层的Windows CE实现的函数层.USB设备驱动程 ...
- 内核层与应用层通信详解
做驱动开发的肯定会遇到应用层与内核层的通信的问题,首先说内核层与应用层的通信可以大概分为两个方面,第一是应用层向内核层主动传递消息,第二是内核层主动与应用层通信.下面我们将分开来谈两个方面. 我们先来 ...
- 多线程编程(9) - 认识等待函数 WaitForSingleObject
一下子跳到等待函数 WaitForSingleObject, 是因为下面的 Mutex.Semaphore.Event.WaitableTimer 等同步手段都要使用这个函数; 不过等待函数可不止 W ...
- 多线程编程(1) - 认识等待函数 WaitForSingleObject
function WaitForSingleObject(hHandle: THandle; {要等待的对象句柄}dwMilliseconds: DWORD {等待的时间, 单位是毫秒} ): DWO ...
- 多线程编程里如何运用CreateMutex,WaitForSingleObject,ReleaseMutex来实现线程同步
这几天忙着写一个实现basler相机的采集功能的软件,其实无非也就是看文档,调用他提供的接口. 但在这其中出现了一点小问题,我写了一个子进程,但每次使用全局标识符关闭子进程,主进程都会出现错误,提示捕 ...
最新文章
- 9.8.6恢复系统数据库
- ES5 数组方法forEach
- RxJava初入学习(一)之Gifts-for-designers
- mysql中index的作用,在mysql中使用INDEXES有什么好处?
- 黄聪: bootstrap 多模态框实现
- SAP Spartacus的persist focus,触发map set的条件
- oracle的打开图标,Oracle的SQL Developer 在Ubuntu上以图标显示且双击能运行
- nssl1156-今天你AK了吗?【康托展开,高精度,二分答案,树状数组】
- Lottie 站在巨人的肩膀上实现 Android 酷炫动画效果
- 处理iPhone5加长屏幕的4种方法
- 一维信号小波阈值去噪 c语言,一维信号小波阈值去噪
- 构建可网管的企业网络
- ajax基本概念,方法
- 我的世界服务器被踢会显示什么,我的世界:500人被踢,服务器“假死”,2b2t的附魔台成掉线之王...
- 爬虫初识(爬取dytt电影列表及下载地址)
- Calander用例
- 计算网格中直线经过的格子
- 基于SLAM的机器人导航避障方案
- 做一个快乐的程序员,去感受爱
- base64编码解码方法