检查命名事件

时间:2012-06-11 10:02:08

标签: c++ windows event-handling

我有一个使用::CreateEvent创建命名事件的流程。

在我的过程中,我想检查事件是否存在,但我不想在事件不存在的情况下创建事件。

我该怎么做?

我可以这样做,但是如果它不存在则会创建事件:

HANDLE hEvent;
hEvent= ::CreateEvent(NULL, FALSE, FALSE, _T("MyEvent"));
if (::GetLastError() != ERROR_ALREADY_EXISTS)
{
   .......
}

2 个答案:

答案 0 :(得分:3)

OpenEvent 会创建事件(如果该事件尚不存在),因此您的代码几乎已经完成了您想要的操作。在检查错误代码之前,您需要检查NULL的事件句柄:

HANDLE hEvent;
hEvent= ::OpenEvent(FALSE, FALSE, _T("MyEvent"));
if (!hEvent) // event does not already exist, or other problem
{
   .......
}

答案 1 :(得分:1)

CString csHandleName = "hEvent";
int nHandleinc(0);
HANDLE hHandleEvent = NULL;
while(!hHandleEvent)
{
    csHandleName.Format("hEvent%d",nHandleinc);
    hHandleEvent = CreateEvent(NULL,TRUE,false,csHandleName);
    if (GetLastError() == ERROR_ALREADY_EXISTS ) 
    {
    CloseHandle( hHandleEvent ); 
    hHandleEvent = NULL;
    }
    nHandleinc++;
}