このようにテンプレート構造体を定義すると、次のようになります。
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を返すことを保証できますか?いいえの場合、どのような状況で失敗する可能性があり、それをどのように処理する必要がありますか?