OpenMutex()
總是返回不同的句柄地址是否正常?該文件說如果成功則返回HANDLE
,否則返回NULL
。指定互斥鎖的不同HANDLE結果
OpenMutex的每個實例返回不同的手柄......
m_logMutex被定義爲static HANDLE
。
m_logMutex = OpenMutex(SYNCHRONIZE, FALSE, LOGMUTEX);
if(m_logMutex == NULL) {
m_logMutex = CreateMutex(NULL, FALSE, LOGMUTEX);
}
此外,由於這是命名爲,爲什麼連一個靜態的處理?這是一個程序的一部分,可以將來自不同進程的數千個事務歸檔到同一個數據庫中。我發現我的靜態HANDLE被改變成不同的手柄並造成WAIT_FAILED
錯誤
是的,沒關係。甚至可以同時對同一內核對象使用2+處理(請參閱'DuplicateHandle' API)。 –
相關:也許我已經在Unix世界很久了,但我記得你可以簡單地使用'CreateMutex',並且你可以通過檢查'GetLastError()來「知道」它是否打開了一個以前打開過的相同名稱的互斥體。對於'E_ALREADY_EXISTS',如果知道你是否是創建它的人很重要。換句話說,這裏的'如果OpenMutex()'邏輯似乎沒有必要。 – WhozCraig
@WhozCraig是的。我注意到'CreateMutex()'具有相同的行爲,但我擔心每次看到新的句柄。 – kenyu73