]>
Commit | Line | Data |
---|---|---|
4ae63783 CF |
1 | /* cygwait.h |
2 | ||
3 | Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 | |
4 | Red Hat, Inc. | |
5 | ||
6 | This file is part of Cygwin. | |
7 | ||
8 | This software is a copyrighted work licensed under the terms of the | |
9 | Cygwin license. Please consult the file "CYGWIN_LICENSE" for | |
10 | details. */ | |
11 | ||
12 | #pragma once | |
13 | ||
2addde8c CF |
14 | #define WAIT_CANCELED (WAIT_OBJECT_0 + 2) |
15 | #define WAIT_SIGNALED (WAIT_OBJECT_0 + 1) | |
16 | ||
4ae63783 CF |
17 | enum cw_wait_mask |
18 | { | |
19 | cw_cancel = 0x0001, | |
20 | cw_cancel_self = 0x0002, | |
21 | cw_sig = 0x0004, | |
22 | cw_sig_eintr = 0x0008 | |
23 | }; | |
24 | ||
962f9a2c CF |
25 | extern LARGE_INTEGER cw_nowait_storage; |
26 | #define cw_nowait (&cw_nowait_storage) | |
27 | #define cw_infinite ((PLARGE_INTEGER) NULL) | |
28 | ||
4ae63783 CF |
29 | const unsigned cw_std_mask = cw_cancel | cw_cancel_self | cw_sig; |
30 | ||
31 | DWORD cancelable_wait (HANDLE, PLARGE_INTEGER timeout = NULL, | |
32 | unsigned = cw_std_mask) | |
33 | __attribute__ ((regparm (3))); | |
34 | ||
b052bf26 | 35 | extern inline DWORD __attribute__ ((always_inline)) |
978441cc | 36 | cancelable_wait (HANDLE h, DWORD howlong, unsigned mask) |
4ae63783 | 37 | { |
4ae63783 | 38 | LARGE_INTEGER li_howlong; |
b052bf26 | 39 | PLARGE_INTEGER pli_howlong; |
4ae63783 CF |
40 | if (howlong == INFINITE) |
41 | pli_howlong = NULL; | |
42 | else | |
43 | { | |
d6953d3f | 44 | li_howlong.QuadPart = -(10000ULL * howlong); |
4ae63783 CF |
45 | pli_howlong = &li_howlong; |
46 | } | |
978441cc CF |
47 | return cancelable_wait (h, pli_howlong, mask); |
48 | } | |
49 | ||
50 | static inline DWORD __attribute__ ((always_inline)) | |
51 | cygwait (HANDLE h, DWORD howlong = INFINITE) | |
52 | { | |
53 | return cancelable_wait (h, howlong, cw_cancel | cw_sig); | |
4ae63783 CF |
54 | } |
55 | ||
56 | static inline DWORD __attribute__ ((always_inline)) | |
57 | cygwait (DWORD howlong) | |
58 | { | |
962f9a2c | 59 | return cygwait (NULL, howlong); |
4ae63783 | 60 | } |