X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2Fwin32%2FIOManager.h;h=686ea6ca23453fdbd0abe315770ee6ac9dc73368;hb=59940493f000b3542a93d71e925d37a3f61b2f1a;hp=3543a416ec70e726dbb214ee9cbccf1be73b1aa0;hpb=5b4f5a6aa8f384573f0f11bc744d5637a1f3bc09;p=ghc-hetmet.git diff --git a/ghc/rts/win32/IOManager.h b/ghc/rts/win32/IOManager.h index 3543a41..686ea6c 100644 --- a/ghc/rts/win32/IOManager.h +++ b/ghc/rts/win32/IOManager.h @@ -32,18 +32,36 @@ extern void* GetFiberData ( void ); * */ typedef void (*CompletionProc)(unsigned int requestID, - void* param, int fd, int len, - char* buf, + void* buf, int errCode); +/* + * Asynchronous procedure calls executed by a worker thread + * take a generic state argument pointer and return an int by + * default. + */ +typedef int (*DoProcProc)(void *param); + +typedef union workData { + struct { + int fd; + int len; + char *buf; + } ioData; + struct { + int msecs; + } delayData; + struct { + DoProcProc proc; + void* param; + } procData; +} WorkData; + typedef struct WorkItem { unsigned int workKind; - int fd; - int len; - char* buf; - void* param; + WorkData workData; unsigned int requestID; CompletionProc onCompletion; } WorkItem; @@ -54,10 +72,11 @@ extern CompletionProc onComplete; * that instead of passing a tag describing the work to be performed, * a function pointer is passed instead. Maybe later. */ -#define WORKER_READ 1 -#define WORKER_WRITE 2 -#define WORKER_DELAY 4 -#define WORKER_FOR_SOCKET 8 +#define WORKER_READ 1 +#define WORKER_WRITE 2 +#define WORKER_DELAY 4 +#define WORKER_FOR_SOCKET 8 +#define WORKER_DO_PROC 16 /* * Starting up and shutting down. @@ -71,7 +90,6 @@ extern void ShutdownIOManager ( void ); * will invoke upon completion. */ extern int AddDelayRequest ( unsigned int msecs, - void* data, CompletionProc onCompletion); extern int AddIORequest ( int fd, @@ -79,7 +97,10 @@ extern int AddIORequest ( int fd, BOOL isSocket, int len, char* buffer, - void* data, CompletionProc onCompletion); +extern int AddProcRequest ( void* proc, + void* data, + CompletionProc onCompletion); + #endif /* __IOMANAGER_H__ */