setevent在C++多线程编程中的应用

avatar
作者
筋斗云
阅读量:0

setevent 是 Windows API 中的一个函数,用于设置一个事件对象的状态为已触发

以下是一个简单的示例,展示了如何在 C++ 多线程编程中使用 SetEvent

#include<iostream> #include<windows.h> #include<process.h>  HANDLE hEvent;  unsigned int __stdcall threadFunction(void* arg) {     std::cout << "Thread is waiting for event..."<< std::endl;     WaitForSingleObject(hEvent, INFINITE);     std::cout << "Event is signaled! Thread is running."<< std::endl;     return 0; }  int main() {     hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);     if (hEvent == NULL) {         std::cerr << "Failed to create event object."<< std::endl;         return 1;     }      uintptr_t threadId = _beginthreadex(NULL, 0, threadFunction, NULL, 0, NULL);     if (threadId == 0) {         std::cerr << "Failed to create thread."<< std::endl;         CloseHandle(hEvent);         return 1;     }      Sleep(2000); // Wait for 2 seconds     std::cout << "Setting event..."<< std::endl;     SetEvent(hEvent);      WaitForSingleObject((HANDLE)threadId, INFINITE);     CloseHandle(hEvent);     CloseHandle((HANDLE)threadId);      return 0; } 

在这个示例中,我们首先创建了一个事件对象 hEvent。然后,我们创建了一个新线程,该线程将等待事件被触发。接下来,主线程休眠 2 秒钟,然后调用 SetEvent 函数来触发事件。当事件被触发时,等待线程将继续执行。最后,我们关闭所有的句柄并退出程序。

需要注意的是,这个示例仅适用于 Windows 平台。如果你需要在其他操作系统上实现类似的功能,可以考虑使用条件变量、互斥锁等同步原语。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!