source: trunk/src/kernel32/overlappedio.h@ 7551

Last change on this file since 7551 was 7551, checked in by sandervl, 24 years ago

overlapped io updates

File size: 2.6 KB
Line 
1/* $Id: overlappedio.h,v 1.2 2001-12-05 18:06:03 sandervl Exp $ */
2
3/*
4 * Win32 overlapped IO class
5 *
6 * Copyright 2001 Sander van Leeuwen <sandervl@xs4all.nl>
7 *
8 * Project Odin Software License can be found in LICENSE.TXT
9 *
10 */
11
12#ifndef __OVERLAPPEDIO_H__
13#define __OVERLAPPEDIO_H__
14
15#define EVENT_READ 1
16#define EVENT_WRITE 2
17#define EVENT_READWRITE (EVENT_WRITE|EVENT_READ)
18#define EVENT_POLL 4
19
20//forward decl
21class OverlappedIOHandler;
22
23typedef struct {
24 DWORD fEvent;
25 OverlappedIOHandler *lpOverlappedObj;
26} OVERLAPPED_THREAD_PARAM, *LPOVERLAPPED_THREAD_PARAM;
27
28typedef DWORD (* SYSTEM LPOVERLAPPED_HANDLER)(DWORD dwUserData, LPOVERLAPPED lpOverlapped);
29
30enum OverlappedIOError {
31 OutOfMemory, EventCreationFailed, ThreadCreationFailed
32};
33
34class OverlappedIOHandler
35{
36public:
37 OverlappedIOHandler(LPOVERLAPPED_HANDLER lpReadHandler,
38 LPOVERLAPPED_HANDLER lpWriteHandler,
39 LPOVERLAPPED_HANDLER lpPollHandler = NULL);
40 ~OverlappedIOHandler();
41
42 BOOL WriteFile(HANDLE hOS2Handle,
43 LPCVOID lpBuffer,
44 DWORD nNumberOfBytesToWrite,
45 LPDWORD lpNumberOfBytesWritten,
46 LPOVERLAPPED lpOverlapped,
47 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
48
49 BOOL ReadFile(HANDLE hOS2Handle,
50 LPCVOID lpBuffer,
51 DWORD nNumberOfBytesToRead,
52 LPDWORD lpNumberOfBytesRead,
53 LPOVERLAPPED lpOverlapped,
54 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
55
56 BOOL CancelIo(HANDLE hOS2Handle);
57
58 BOOL GetOverlappedResult(HANDLE hOS2Handle,
59 LPOVERLAPPED lpoOverlapped,
60 LPDWORD lpcbTransfer,
61 DWORD dwTimeout);
62
63protected:
64
65private:
66
67 DWORD threadHandler(DWORD fEvent);
68
69 HANDLE hThreadPoll;
70 HANDLE hThreadRead;
71 HANDLE hThreadWrite;
72 HANDLE hEventExit;
73 HANDLE hEventPoll;
74 HANDLE hEventRead;
75 HANDLE hEventWrite;
76
77 LPOVERLAPPED_HANDLER lpReadHandler;
78 LPOVERLAPPED_HANDLER lpWriteHandler;
79 LPOVERLAPPED_HANDLER lpPollHandler;
80
81 CRITICAL_SECTION critsect;
82
83 //linked list of pending operations
84 LPOVERLAPPED pending;
85
86
87 friend DWORD CALLBACK OverlappedIOThread(LPVOID lpThreadParam);
88};
89
90
91#endif // __OVERLAPPEDIO_H__
Note: See TracBrowser for help on using the repository browser.