// Common, group WinWrap
// see CW Class Library
// Copyright Alexander Liss
#include "waitable.h"
void WaitableCollection::copy(const WaitableCollection& z)
{
size=z.size;
for(int i=0;i<size;++i)
handles[i]=z.handles[i];
}
int WaitableCollection::add(const WaitableObject& z)
{
if (size >= MAXIMUM_WAIT_OBJECTS)
return 1;
handles[size++] = z.get_handle();
return 0;
}
int WaitableCollection::add(const WaitableCollection & z)
{
if(size+z.size>MAXIMUM_WAIT_OBJECTS)
return 1;
for (int i = 0; i < z.size; i++)
handles[size++] = z.handles[i];
return 0;
}
void wait(DWORD milliseconds)
{
::Sleep(milliseconds);
}
DWORD wait(const WaitableObject& z,DWORD milliseconds)
{
return ::WaitForSingleObject(z.get_handle(),milliseconds);
}
DWORD wait(const WaitableCollection& z, BOOL bWaitAll, DWORD milliseconds)
{
if (z.size == 0)
return WAIT_FAILED;
return ::WaitForMultipleObjects( z.size, z.handles, bWaitAll, milliseconds);
}
void wait_APC(DWORD milliseconds,BOOL ignore_APC)
{
::SleepEx(milliseconds,! ignore_APC);
}
DWORD wait_APC(const WaitableObject& z,DWORD milliseconds,BOOL ignore_APC)
{
return WaitForSingleObjectEx(z.get_handle(),milliseconds,! ignore_APC);
}
DWORD wait_APC(const WaitableCollection& z, BOOL bWaitAll, DWORD milliseconds,BOOL ignore_APC)
{
if (z.size == 0)
return WAIT_FAILED;
return ::WaitForMultipleObjectsEx( z.size, z.handles, bWaitAll, milliseconds,! ignore_APC);
}