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) 函數的基本步驟如下:

  1. 在執行緒中創建或打開事件對象。可以使用 CreateEvent、OpenEvent 或其他函數創建或打開事件對象。例如:                                                                                                          HANDLE hEvent = CreateEvent(NULL, TRUE, FALSE, TEXT("MyEvent"));
  2. 在執行緒中調用 WaitForSingleObject(hEvent, INFINITE) 函數。例如:
  3. WaitForSingleObject(hEvent, INFINITE);
  4. 在另一個執行緒或程序中發送信號量或信號通知給事件對象。可以使用 SetEvent、PulseEvent 或其他函數發送信號量或信號通知。例如:
  5. SetEvent(hEvent);
  6. 在第 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