// Common, group WinWrap
// see CW Class library
// Copyright Alexander Liss
#ifndef __WAITABLE_H__
#define __WAITABLE_H__
#include "win0.h"
struct WaitableObject
{
virtual HANDLE get_handle() const = 0;
virtual DWORD get_status() const = 0;
};
class WaitableCollection
{
friend DWORD wait(const WaitableCollection& , BOOL , DWORD );
friend DWORD wait_APC(const WaitableCollection& , BOOL , DWORD , BOOL);
public:
WaitableCollection():size(0){}
WaitableCollection(const WaitableCollection & z){copy(z);}
WaitableCollection & operator= (const WaitableCollection & z)
{if(&z!=this) copy(z); return *this;}
LONG get_number()const{return size;}
int add(const WaitableObject& object);
int add(const WaitableCollection & collection);
private:
HANDLE handles[MAXIMUM_WAIT_OBJECTS];
LONG size;
void copy(const WaitableCollection & );
};
void wait(DWORD milliseconds);
DWORD wait(const WaitableObject& z,DWORD milliseconds=INFINITE);
DWORD wait(const WaitableCollection& z, BOOL bWaitAll=FALSE, DWORD milliseconds=INFINITE);
void wait_APC(DWORD milliseconds,BOOL ignore_APC=FALSE);
DWORD wait_APC(const WaitableObject& z,DWORD milliseconds=INFINITE,BOOL ignore_APC=FALSE);
DWORD wait_APC(const WaitableCollection& z, BOOL bWaitAll=FALSE, DWORD milliseconds=INFINITE,BOOL ignore_APC=FALSE);
#endif