C++ 检查命名事件
我有一个使用C++ 检查命名事件,c++,windows,event-handling,C++,Windows,Event Handling,我有一个使用::CreateEvent创建命名事件的进程 在我的过程中,我想检查事件是否存在,但如果它不存在,我不想创建事件 我怎么做 我可以这样做,但如果事件不存在,则会创建该事件: HANDLE hEvent; hEvent= ::CreateEvent(NULL, FALSE, FALSE, _T("MyEvent")); if (::GetLastError() != ERROR_ALREADY_EXISTS) { ....... } OpenEvent如果事件不存在,则不会创建
::CreateEvent
创建命名事件的进程
在我的过程中,我想检查事件是否存在,但如果它不存在,我不想创建事件
我怎么做
我可以这样做,但如果事件不存在,则会创建该事件:
HANDLE hEvent;
hEvent= ::CreateEvent(NULL, FALSE, FALSE, _T("MyEvent"));
if (::GetLastError() != ERROR_ALREADY_EXISTS)
{
.......
}
OpenEvent
如果事件不存在,则不会创建该事件,因此您的代码几乎已经实现了您想要的功能。在检查错误代码之前,需要检查事件句柄的NULL
:
HANDLE hEvent;
hEvent= ::OpenEvent(FALSE, FALSE, _T("MyEvent"));
if (!hEvent) // event does not already exist, or other problem
{
.......
}
OpenEvent
如果事件不存在,则不会创建该事件,因此您的代码几乎已经实现了您想要的功能。在检查错误代码之前,需要检查事件句柄的NULL
:
HANDLE hEvent;
hEvent= ::OpenEvent(FALSE, FALSE, _T("MyEvent"));
if (!hEvent) // event does not already exist, or other problem
{
.......
}
对不起,我弄错了。必须使用“CreateEvent”而不是“OpenEvent”。“OpenEvent”对我根本不起作用,它在任何情况下都返回NULL,即使在事件存在的情况下也是如此。。我编辑了我的问题。请检查错误代码。如果事件存在,但
OpenEvent
返回NULL
则存在另一个问题。这可能是权限错误--如果事件是由另一个进程创建的,则您可能没有访问该事件的权限,特别是如果另一个进程是服务或其他系统进程,或由其他用户运行。抱歉,我搞错了。必须使用“CreateEvent”而不是“OpenEvent”。“OpenEvent”对我根本不起作用,它在任何情况下都返回NULL,即使在事件存在的情况下也是如此。。我编辑了我的问题。请检查错误代码。如果事件存在,但OpenEvent
返回NULL
则存在另一个问题。这可能是权限错误——如果事件是由另一个进程创建的,则您可能没有访问该事件的权限,尤其是当另一个进程是服务或其他系统进程,或由其他用户运行时。