CreateEvent()怎么出现了这种情况?

pyc21 2009-03-03 09:56:12
define APP_SAMEUSRER_EVNET _T("Local\\SameUserEvent")
#define APP_1SAMEUSRER_EVNET _T("Global\\MultiUserEvent")

HANDLE CreateEventByName(LPTSTR lpEventName);

int _tmain(int argc, _TCHAR* argv[])
{
while (1)
{

HANDLE h0Event = CreateEventByName(APP_SAMEUSRER_EVNET);
if ( GetLastError() == ERROR_ALREADY_EXISTS )
{
if ( h0Event )
{
CloseHandle(h0Event);
cout<< "Exit 2 " << "Handle :"<<(long)h0Event<<endl;
cin.get();
}
}
else
{
cout<< "Created 2" << " Handle :"<<(long)h0Event<<endl;
cin.get();
}

}
return 0;
}

// 次函数根据名字创建Event
HANDLE CreateEventByName(LPTSTR lpEventName)
{
SECURITY_ATTRIBUTES sa = {0};
SECURITY_DESCRIPTOR sd = {0};

//Initializes a new security descriptor
InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
//Set information in a discretionary access control list (DACL).
SetSecurityDescriptorDacl(&sd, TRUE, NULL, FALSE);
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor = &sd;

//Create an event specified by name
HANDLE hEvent = CreateEvent(&sa, TRUE, FALSE, lpEventName);
return hEvent;
}



结果是: create 2 handle 56

exist 2 handle 60
exist 2 handle 60

怎么不是56, 而是60呢???


...全文
112 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
fishion 2009-03-03
  • 打赏
  • 举报
回复
再创建的时候句柄值是不同的,不然的话,本来Create一次就要Close 一次,但如果相同的话,那不就是Create多次,Close一次就可以了
wocow3 2009-03-03
  • 打赏
  • 举报
回复
两个句柄值,但都对应同一个事件对象

第二次仍然Create成功,但仅仅增加了Event的引用计数,并生成了一个新的句柄
GetLastError() == ERROR_ALREADY_EXISTS
并不表示Create失败

2,586

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 资源
社区管理员
  • 资源
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧