closeHandle()多次關閉同一個控制代碼會導致程式奔潰
阿新 • • 發佈:2018-11-23
自己寫了一個升級小工具,在程式結束打算關閉時,竟然奔潰了,最後定位到了
wrHandle =devhandle;
rdHandle = devhandle;
if(wrHandle != INVALID_HANDLE_VALUE)
{
CloseHandle(wrHandle);
wrHandle = INVALID_HANDLE_VALUE;
}
if(rdHandle != INVALID_HANDLE_VALUE){
CloseHandle(rdHandle);
rdHandle = INVALID_HANDLE_VALUE;
}
因為他們的控制代碼值相等,所以在關閉時,進行了多次關閉,導致程式奔潰,修改如下:
if (wrHandle == rdHandle)
{
CloseHandle(wrHandle);
wrHandle = INVALID_HANDLE_VALUE;
rdHandle = INVALID_HANDLE_VALUE;
}else{
if(wrHandle != INVALID_HANDLE_VALUE)
{
CloseHandle(wrHandle);
wrHandle = INVALID_HANDLE_VALUE;
}
if(rdHandle != INVALID_HANDLE_VALUE)
{
CloseHandle(rdHandle);
rdHandle = INVALID_HANDLE_VALUE;
}
然後程式就ok,再也不會在程式關閉時中斷於此了。
參考資料:
1.