C++多线程:WaitForSingleObject(m-创新互联
WaitForSingleObject(m_hEvent,INFINITE) ;
10年积累的网站建设、成都网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有鞍山免费网站建设让你可以放心的选择与我们合作。WaitForSingleObject(m_hEvent, INFINITE) 函數用於停止一個指定的執行緒,直到有信號量或信號通知接收。
m_hEvent 是一個句柄,指向一個事件對象,它可以是由 CreateEvent、OpenEvent 或其他函數創建的。
INFINITE 常量定義為 0xFFFFFFFF,表示無限等待。也就是說,執行緒將一直等待直到有信號量或信號通知接收,並且不會超時返回。
簡而言之,WaitForSingleObject(m_hEvent, INFINITE) 函數讓當前執行緒暫停,直到有信號量或信號通知接收為止
如何使用?
使用 WaitForSingleObject(m_hEvent, INFINITE) 函數的基本步驟如下:
- 在執行緒中創建或打開事件對象。可以使用 CreateEvent、OpenEvent 或其他函數創建或打開事件對象。例如: HANDLE hEvent = CreateEvent(NULL, TRUE, FALSE, TEXT("MyEvent"));
- 在執行緒中調用 WaitForSingleObject(hEvent, INFINITE) 函數。例如:
- WaitForSingleObject(hEvent, INFINITE);
- 在另一個執行緒或程序中發送信號量或信號通知給事件對象。可以使用 SetEvent、PulseEvent 或其他函數發送信號量或信號通知。例如:
- SetEvent(hEvent);
- 在第 3 步中發送信號量或信號通知後,WaitForSingleObject(hEvent, INFINITE) 函數將返回,執行緒將恢復執行。
注意:請務必在不再使用事件對象時記得關閉它。例如:
CloseHandle(hEvent);
简单范例:
#include#includeusing namespace std;
HANDLE hEvent;
// 執行緒函數
DWORD WINAPI ThreadFunc(LPVOID lpParam)
{
cout<< "Thread started. Waiting for event..."<< endl;
// 等待事件
WaitForSingleObject(hEvent, INFINITE);
cout<< "Event received. Exiting thread..."<< endl;
return 0;
}
int main()
{
// 創建事件
hEvent = CreateEvent(NULL, TRUE, FALSE, TEXT("MyEvent"));
// 創建執行緒
HANDLE hThread = CreateThread(NULL, 0, ThreadFunc, NULL, 0, NULL);
cout<< "Press Enter to send event..."<< endl;
cin.get();
// 發送事件
SetEvent(hEvent);
// 等待執行緒結束
WaitForSingleObject(hThread, INFINITE);
// 關閉事件和執行緒句柄
CloseHandle(hEvent);
CloseHandle(hThread);
return 0;
}
執行結果如下:
Press Enter to send event...
Thread started. Waiting for event...
Event received. Exiting thread...
在上面的範例中,主程序創建了一個事件對象,並創建了一個執行緒。在執行緒中,調用了 WaitForSingleObject(hEvent, INFINITE) 函數,執行緒暫停執行,等待事件。在主程序中,使用 SetEvent(hEvent) 函数發送事件,執行緒恢復執行,然後結束。
总结:
在使用 WaitForSingleObject(m_hEvent, INFINITE) 函數時,還有一些需要注意的地方。
- 事件對象必須先創建或打開,才能使用 WaitForSingleObject 函數等待。
- 在發送信號量或信號通知時,必須確保事件對象已被打開。
- 如果執行緒需要在多個事件對象之中進行等待,可以使用 WaitForMultipleObjects 函數。
- 如果需要在超時指定的時間內等待,可以使用 WaitForSingleObject(m_hEvent, dwMilliseconds) 函數。其中 dwMilliseconds 是等待的毫秒數。
- 如果執行緒需要等待的事件對象並不存在,WaitForSingleObject 函數將返回 WAIT_FAILED,並設置錯誤碼為 ERROR_INVALID_HANDLE。
- 如果需要等待的事件對象已經被關閉,WaitForSingleObject 函數將返回 WAIT_ABANDONED,並設置錯誤碼為 ERROR_INVALID_HANDLE。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
分享名称:C++多线程:WaitForSingleObject(m-创新互联
本文网址:http://pwwzsj.com/article/dgsghh.html