mfc WaitForMultipleObjects 使用完整示例demo
时间: 2024-12-09 07:16:43 浏览: 55
MFC(Microsoft Foundation Classes)是一个用于Windows应用程序开发的C++库,它包含了一些方便的类和函数,如WaitForMultipleObjects,用于同步线程操作。这个函数通常在多线程编程中使用,等待一组句柄中的任意一个变为活动状态。
以下是一个简单的WaitForMultipleObjects使用示例:
```cpp
#include "afxwin.h"
#include <windows.h> // 包含WaitForMultipleObjects
class CMyThread : public CWinThread
{
public:
CMyThread()
{
m_hMutex = CreateMutex(NULL, FALSE, NULL); // 创建互斥量
m_hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); // 创建事件
}
protected:
virtual void Run()
{
Sleep(5000); // 线程睡眠5秒
ReleaseMutex(m_hMutex); // 释放互斥量,唤醒等待者
SetEvent(m_hEvent); // 设置事件,表示任务完成
}
private:
HANDLE m_hMutex; // 互斥量句柄
HANDLE m_hEvent; // 事件句柄
};
int APIENTRY wWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPWSTR lpCmdLine,
int nCmdShow)
{
CMyThread thread; // 创建并启动新线程
thread.CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&CMyThread::Run, NULL, 0, NULL);
HANDLE objects[2] = { m_hMutex, m_hEvent }; // 待监控的对象数组
DWORD dwMilliseconds = INFINITE; // 等待无限时间
DWORD result;
if (!WaitForMultipleObjects(_countof(objects), objects, FALSE, dwMilliseconds)) // 等待其中一个对象
{
printf("Wait failed with error %u\n", GetLastError());
}
else
{
if (result == WAIT_OBJECT_0) // 如果第一个元素变为活动
printf("Mutex released.\n");
else if (result == WAIT_OBJECT_0 + 1) // 如果第二个元素变为活动
printf("Event set.\n");
}
return 0;
}
```
在这个例子中,主线程创建了一个子线程,并分别创建了互斥量和事件。线程运行后,当它的任务完成后会设置事件。主线程通过WaitForMultipleObjects监视这两个对象,一旦其中一个发生变化(互斥量释放或事件触发),就结束等待并处理相应的事件。
阅读全文
相关推荐


















