下的C++代碼同步的API。如果我定義模板結構,像這樣:失敗的Windows
template <typename T>
struct SYNCHED_DATA
{
SYNCHED_DATA()
{
hMutex = ::CreateMutex(NULL, FALSE, NULL);
}
~SYNCHED_DATA()
{
if(hMutex)
CloseHandle(hMutex);
hMutex = NULL;
}
void set(T* pV)
{
if(pV)
{
::WaitForSingleObject(hMutex, INFINITE);
var = *pV;
::ReleaseMutex(hMutex);
}
}
void get(T* pV)
{
if(pV)
{
::WaitForSingleObject(hMutex, INFINITE);
*pV = var;
::ReleaseMutex(hMutex);
}
}
private:
HANDLE hMutex;
T var;
SYNCHED_DATA(const SYNCHED_DATA& s)
{
}
SYNCHED_DATA& operator = (const SYNCHED_DATA& s)
{
}
};
我可以放心,這些WaitForSingleObject的()的API將始終返回WAIT_OBJECT_0?如果不是,那麼他們在什麼情況下可能會失敗,我該如何處理呢?
[文檔](http://msdn.microsoft.com/en-us/library/windows/desktop/ms687032(v = vs.85).aspx)詳細介紹了返回代碼。 – chris
「WAIT_FAILED =函數失敗,要獲得擴展錯誤信息,請調用GetLastError。」 - 你可以「細節」? – c00000fd
我的意思是它具有所有可能的返回值及其含義。如果你沒有注意到,'GetLastError()'使用的錯誤列表也是巨大的。 – chris