WaitForSingleObject使用举例
时间: 2024-10-07 10:05:20 浏览: 56
操作互斥对象的请求-线程、预处理ppt
`WaitForSingleObject`是Windows API中的一个函数,主要用于等待单个对象达到指定的状态,比如窗口消息循环中的等待某个窗口的消息、进程同步或者是对文件句柄的操作。这个函数接受两个参数:要等待的对象以及一个超时时间(毫秒)。
下面是一个简单的例子,假设我们有一个创建的全局事件对象`hEvent`:
```c++
#include <windows.h>
// 创建一个全局事件对象
HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
// 开始一个新线程并设置等待事件
DWORD WINAPI ThreadFunction(LPVOID lpParam) {
// 线程进入休眠状态,直到事件发生
if (WaitForSingleObject(hEvent, INFINITE)) {
printf("Thread received event.\n");
// 对事件做些操作...
ReleaseEvent(hEvent); // 释放事件,允许其他线程继续
} else {
printf("Thread timed out waiting for the event.\n");
}
}
// 启动新线程
CreateThread(NULL, 0, ThreadFunction, NULL, 0, NULL);
// 主线程做一些其他事情,然后设置事件
SetEvent(hEvent); // 触发事件
// 当主线程结束,会关闭进程,新启动的线程也会因事件触发而退出
```
在这个例子中,`WaitForSingleObject(hEvent, INFINITE)`会使得当前线程无限期地阻塞,直到线程通过`SetEvent(hEvent)`来唤醒它。如果设置了有限的时间(比如5000毫秒),则在指定时间内未接收到事件,则函数会返回。
阅读全文