C++:event

/**
 * @:事件通信。事件通信主要是發送信號,作爲事件通知使用,佔用資源少,速度快。
 * @:處理方法:
 *   主線程創建事件(CreateEvent) -> 手動設置事件爲有信號狀態SetEvent
 *   子線程打開事件(OpenEvent)   -> 等待事件爲有信號狀態WaitForSingleObject -> 業務處理 -> 手動設置事件爲無信號狀態
 */

 發送端:
 // 創建事件
 hEvent = ::CreateEvet(NULL,TRUE,FALSE,_T("MYMESSAGE"));      // 創建或打開一個命名的或無名的事件對象

 if((hEvent == INVALID_HANDLE_VALUE) || (hEvent == 0))
 {
     AfxMessageBox(L"start error");
 }

 // 手動設置事件狀態
 /**
  * @:WaitForSingleObject()等待,直到參數所指定的OBJECT成爲發信號狀態時才返回,OBJECT可以是EVENT,也可以是其它內核對象
  *   使用SetEvent函數將事件對象的狀態置爲有信號狀態。使用ResetEvent函數將事件對象的狀態置爲無信號狀態
  */
 SetEvent(hsEvent);

 接收端:

 // 獲取事件句柄
 HANLE g_hEvent = ::OpenEvent(EVENT_ALL_ACCESS,FALSE,_T("MYMESSAGE"));
 if(g_hEvent == INVALID_HANDLE_VALUE || (g_hEvent == 0))
 {
     ...
 }

 // 獲取事件的信號狀態
 while(1)
 {
     if(WaitForSingleObject(g_hEvent,100) == WAIT_OBJECT_0)
     {
        AfxMessageBox(L"recevice finished!");  
        ResetEvent(g_hEvent);
     }
 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章