/**
* @:事件通信。事件通信主要是發送信號,作爲事件通知使用,佔用資源少,速度快。
* @:處理方法:
* 主線程創建事件(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);
}
}
C++:event
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.