读书人

想问一下closehandle的有关问题

发布时间: 2013-07-04 11:45:33 作者: rapoo

想问一下closehandle的问题


HANDLE hand = CreateEvent(NULL,TRUE,FALSE,NULL);
if (CloseHandle(hand))
{
AfxMessageBox("1");
}

if (CloseHandle(hand))
{
AfxMessageBox("2");
}

if (CloseHandle(hand))
{
AfxMessageBox("3");
}

前面两次成功,第三次失败。为什么可以closehandle两次?第一次closehandle后,应该hand计数递减为0,第二次closehandle就应该失败啊,但结果第二次还是成功,第三次才失败。
[解决办法]



#include <Windows.h>
#include <iostream>

int main()
{

HANDLE hand = CreateEvent(NULL,TRUE,FALSE,NULL);
if (CloseHandle(hand))
{
std::cout<<"1"<<std::endl;
}

if (CloseHandle(hand))
{
std::cout<<"2"<<std::endl;
}

if (CloseHandle(hand))
{
std::cout<<"3"<<std::endl;
}

system("pause");
return 0;
}


只调用一次,表示很正常。
[解决办法]
八成是AfxMessageBox开了个id一样的Handle没来及关...

Handle本身是没计数的,关闭一个Handle会给对应的对象的计数减一。

读书人网 >C++

热点推荐