mfc WaitForMultipleObjects 监控3个事件的完整示例demo
时间: 2024-12-08 15:14:59 浏览: 66
MFC (Microsoft Foundation Classes) 提供了一个函数 `WaitForMultipleObjects`,它用于在一个线程中等待多个互斥量、信号量、事件等对象之一变为活动状态。下面是一个简化的 C++ 示例,演示如何监控三个事件:
```cpp
#include "afxwin.h" // 包含 MFC 的必要头文件
// 假设我们有三个CWinEvent类型的事件对象
CWinEvent* pEvent1 = new CWinEvent(CCEVENT_TIMER); // 事件1
CWinEvent* pEvent2 = new CWinEvent(CCEVENT_CLOSE); // 事件2
CWinEvent* pEvent3 = new CWinEvent(CCEVENT_MSGFILTER); // 事件3
// 初始化每个事件
pEvent1->Signal(); // 首先触发第一个事件
pEvent2->Reset(); // 其他两个保持未触发
// 线程主循环
int nRet;
do {
// 等待最多100毫秒
nRet = ::WaitForMultipleObjects(3, // 数量
reinterpret_cast<HANDLE*>(&pEvent1), // 指向事件的指针数组
FALSE, // 不非阻塞
100); // 超时时间,单位为毫秒
switch (nRet) {
case WAIT_OBJECT_0: // 第一个事件被触发
// 处理第一个事件...
break;
case WAIT_OBJECT_0 + 1: // 第二个事件被触发
// 处理第二个事件...
break;
case WAIT_OBJECT_0 + 2: // 第三个事件被触发
// 处理第三个事件...
break;
default:
// 如果所有事件都未触发,检查错误
assert(nRet != WAIT_TIMEOUT);
break;
}
} while (!pEvent2->IsSet() && !pEvent3->IsSet()); // 继续等待直到其他两个事件也触发
// 清理资源
delete pEvent1;
delete pEvent2;
delete pEvent3;
// 如果需要,释放等待句柄
if (nRet == WAIT_ABANDONED) {
CloseHandle(reinterpret_cast<HANDLE*>(&pEvent1));
// ... 其他的也一样
}
```
阅读全文
相关推荐


















