117 lines
3.3 KiB
C++
117 lines
3.3 KiB
C++
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1994 - 1998.
|
|
//
|
|
// File: waitmult.hxx
|
|
//
|
|
// Contents: Encapsulates a Win32 WaitForMultipleObjects
|
|
//
|
|
// History: 04-Aug-94 DwightKr Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Class: CWaitForMultipleObjects
|
|
//
|
|
// Purpose: Constructor
|
|
//
|
|
// History: 07-Jun-94 DwightKr Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
class CWaitForMultipleObjects
|
|
{
|
|
public :
|
|
|
|
inline CWaitForMultipleObjects(ULONG cMaxHandles);
|
|
~CWaitForMultipleObjects() { delete [] _pHandles; }
|
|
|
|
inline void AddEvent( HANDLE hEvent );
|
|
inline HANDLE Get( DWORD i ) const;
|
|
inline DWORD Wait( DWORD dwTimeout );
|
|
|
|
void ResetCount() { _cNumHandles = 0; }
|
|
|
|
private:
|
|
|
|
HANDLE * _pHandles; // Doesn't own handles in _pHandles
|
|
ULONG _cMaxHandles;
|
|
ULONG _cNumHandles;
|
|
};
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Method: CWaitForMultipleObjects::CWaitForMultipleObjects, public
|
|
//
|
|
// Purpose: Constructor
|
|
//
|
|
// History: 07-Jun-94 DwightKr Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
inline CWaitForMultipleObjects::CWaitForMultipleObjects( ULONG cMaxHandles )
|
|
: _cMaxHandles(cMaxHandles),
|
|
_cNumHandles(0),
|
|
_pHandles(0)
|
|
{
|
|
_pHandles = new HANDLE[_cMaxHandles];
|
|
}
|
|
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Method: CWaitForMultipleObjects::AddEvent, public
|
|
//
|
|
// Purpose: Adds an handle to be waited on
|
|
//
|
|
// Arguments: [hEvent] -- Handle to add
|
|
//
|
|
// History: 07-Jun-94 DwightKr Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
inline void CWaitForMultipleObjects::AddEvent( HANDLE hEvent )
|
|
{
|
|
Win4Assert( _cNumHandles < _cMaxHandles );
|
|
_pHandles[ _cNumHandles ] = hEvent;
|
|
_cNumHandles++;
|
|
}
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Method: CWaitForMultipleObjects::Wait, public
|
|
//
|
|
// Purpose: Waits for one of the handles to be signalled, or timeout
|
|
//
|
|
// History: 07-Jun-94 DwightKr Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
inline DWORD CWaitForMultipleObjects::Wait( DWORD dwTimeout )
|
|
{
|
|
return WaitForMultipleObjects( _cNumHandles,
|
|
_pHandles,
|
|
FALSE,
|
|
dwTimeout );
|
|
}
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Method: CWaitForMultipleObjects::Get, public
|
|
//
|
|
// Synopsis: Retrieves the I-th handle
|
|
//
|
|
// Arguments: [i] -- i
|
|
//
|
|
// Returns: The I-th handle
|
|
//
|
|
// History: 23-Jun-98 KyleP Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
inline HANDLE CWaitForMultipleObjects::Get( DWORD i ) const
|
|
{
|
|
Win4Assert( i < _cNumHandles );
|
|
return _pHandles[ i ];
|
|
}
|