下面是一个使用VC++中的SetEvent函数实现线程同步的示例代码:
#include <iostream>
#include <Windows.h>
// 全局事件句柄
HANDLE g_event;
// 子线程函数
DWORD WINAPI MyThreadFunc(LPVOID lpParam)
{
// 执行一些耗时操作
// 等待事件触发
WaitForSingleObject(g_event, INFINITE);
// 执行需要同步的操作
MessageBox(NULL, L"子线程收到事件通知", L"消息", MB_OK);
return 0;
}
int main()
{
// 创建事件对象,初始状态为非信号状态(未触发)
g_event = CreateEvent(NULL, FALSE, FALSE, NULL);
// 创建子线程并启动
HANDLE hThread = CreateThread(NULL, 0, MyThreadFunc, NULL, 0, NULL);
// 执行一些其他操作
// 触发事件通知子线程继续执行
SetEvent(g_event);
// 等待子线程执行完毕后再继续执行主线程的后续逻辑
WaitForSingleObject(hThread, INFINITE);
// 关闭事件句柄和线程句柄
CloseHandle(g_event);
CloseHandle(hThread);
return 0;
}
在上述示例代码中,主线程创建了一个全局事件对象 g_event
,通过调用 CreateEvent
函数进行初始化。子线程使用 WaitForSingleObject
函数等待事件被触发。主线程通过调用 SetEvent
函数触发事件。当子线程接收到事件通知后,执行需要同步的操作。
请注意,上述示例代码仅为演示目的,实际应用中可能还需要考虑异常处理和其他线程同步机制的使用。
内容由零声教学AI助手提供,问题来源于学员提问