/**
* @:事件通信。事件通信主要是发送信号,作为事件通知使用,占用资源少,速度快。
* @:处理方法:
* 主线程创建事件(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
最新推荐文章于 2024-07-24 17:16:57 发布