You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.7 KiB
55 lines
1.7 KiB
///////////////////////////////////////////////////////////////////////////////
|
|
/* File: thdsync.cpp
|
|
|
|
Description: Contains classes for managing thread synchronization in
|
|
Win32 programs. Most of the work is to provide automatic unlocking
|
|
of synchronization primities on object destruction. The work on
|
|
monitors and condition variables is strongly patterned after
|
|
work in "Multithreaded Programming with Windows NT" by Pham and Garg.
|
|
|
|
|
|
Revision History:
|
|
|
|
Date Description Programmer
|
|
-------- --------------------------------------------------- ----------
|
|
09/22/97 Initial creation. BrianAu
|
|
*/
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
#include "pch.h"
|
|
#pragma hdrstop
|
|
|
|
#include "thdsync.h"
|
|
|
|
|
|
CMutex::CMutex(
|
|
BOOL bInitialOwner
|
|
) : CWin32SyncObj(CreateMutex(NULL, bInitialOwner, NULL))
|
|
{
|
|
if (NULL == Handle())
|
|
throw CSyncException(CSyncException::mutex, CSyncException::create);
|
|
}
|
|
|
|
|
|
|
|
//
|
|
// Wait on a Win32 mutex object.
|
|
// Throw an exception if the mutex has been abandoned or the wait has timed out.
|
|
//
|
|
void
|
|
AutoLockMutex::Wait(
|
|
DWORD dwTimeout
|
|
)
|
|
{
|
|
DWORD dwStatus = WaitForSingleObject(m_hMutex, dwTimeout);
|
|
switch(dwStatus)
|
|
{
|
|
case WAIT_ABANDONED:
|
|
throw CSyncException(CSyncException::mutex, CSyncException::abandoned);
|
|
break;
|
|
case WAIT_TIMEOUT:
|
|
throw CSyncException(CSyncException::mutex, CSyncException::timeout);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|