Pyrogenesis  trunk
wiocp.h
Go to the documentation of this file.
1 /* Copyright (c) 2010 Wildfire Games
2  *
3  * Permission is hereby granted, free of charge, to any person obtaining
4  * a copy of this software and associated documentation files (the
5  * "Software"), to deal in the Software without restriction, including
6  * without limitation the rights to use, copy, modify, merge, publish,
7  * distribute, sublicense, and/or sell copies of the Software, and to
8  * permit persons to whom the Software is furnished to do so, subject to
9  * the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included
12  * in all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
18  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
19  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
20  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21  */
22 
23 /*
24  * I/O completion port
25  */
26 
27 #ifndef INCLUDED_WIOCP
28 #define INCLUDED_WIOCP
29 
30 #include "lib/sysdep/os/win/win.h"
31 
32 // this appears to be the best solution for IO notification.
33 // there are three alternatives:
34 // - multiple threads with blocking I/O. this is rather inefficient when
35 // many directories (e.g. mods) are being watched.
36 // - normal overlapped I/O: build a contiguous array of the hEvents
37 // in all OVERLAPPED structures, and WaitForMultipleObjects.
38 // it would be cumbersome to update this array when adding/removing watches.
39 // - callback notification: a notification function is called when the thread
40 // that initiated the I/O (ReadDirectoryChangesW) enters an alertable
41 // wait state. it is desirable for notifications to arrive at a single
42 // known point - see dir_watch_Poll. however, other APIs might also
43 // trigger APC delivery.
44 
45 // @param hIOCP 0 to create a new port
46 extern void AttachToCompletionPort(HANDLE hFile, HANDLE& hIOCP, ULONG_PTR key, DWORD numConcurrentThreads = 0);
47 
48 extern Status PollCompletionPort(HANDLE hIOCP, DWORD timeout, DWORD& bytesTransferred, ULONG_PTR& key, OVERLAPPED*& ovl);
49 
50 #endif // #ifndef INCLUDED_WIOCP
Status PollCompletionPort(HANDLE hIOCP, DWORD timeout, DWORD &bytesTransferred, ULONG_PTR &key, OVERLAPPED *&ovl)
Definition: wiocp.cpp:40
void AttachToCompletionPort(HANDLE hFile, HANDLE &hIOCP, ULONG_PTR key, DWORD numConcurrentThreads=0)
Definition: wiocp.cpp:30
void * HANDLE
Definition: wgl.h:62
unsigned long DWORD
Definition: wgl.h:56
pthread_key_t key
Definition: wpthread.cpp:140
i64 Status
Error handling system.
Definition: status.h:171
static HANDLE hIOCP
Definition: waio.cpp:54