| author | |
| committer | |
| log | 78c0d33eb75ed7985df39607cf0e0d2ae94ef98a |
| tree | 24e20c05f80086268be53b8a739479df59bbe8b8 |
| parent | 21ca54f56013897573ba5aeb67d946deaa162200 |
| signature | Commit is signed but in an unrecognized format. |
3 files changed, 41 insertions(+), 0 deletions(-)
lib/std/os/windows.zig+28| ... | ... | @@ -183,6 +183,34 @@ pub fn WaitForSingleObjectEx(handle: HANDLE, milliseconds: DWORD, alertable: boo |
| 183 | 183 | } |
| 184 | 184 | } |
| 185 | 185 | |
| 186 | pub fn WaitForMultipleObjectsEx(handles: []const HANDLE, waitAll: bool, milliseconds: DWORD, alertable: bool) !u32 { | |
| 187 | assert(handles.len < MAXIMUM_WAIT_OBJECTS); | |
| 188 | const nCount: DWORD = @intCast(DWORD, handles.len); | |
| 189 | switch (kernel32.WaitForMultipleObjectsEx( | |
| 190 | nCount, | |
| 191 | handles.ptr, | |
| 192 | @boolToInt(waitAll), | |
| 193 | milliseconds, | |
| 194 | @boolToInt(alertable), | |
| 195 | )) { | |
| 196 | WAIT_OBJECT_0...WAIT_OBJECT_0 + MAXIMUM_WAIT_OBJECTS => |n| { | |
| 197 | const handle_index = n - WAIT_OBJECT_0; | |
| 198 | assert(handle_index < nCount); | |
| 199 | return handle_index; | |
| 200 | }, | |
| 201 | WAIT_ABANDONED_0...WAIT_ABANDONED_0 + MAXIMUM_WAIT_OBJECTS => |n| { | |
| 202 | const handle_index = n - WAIT_ABANDONED_0; | |
| 203 | assert(handle_index < nCount); | |
| 204 | return error.WaitAbandoned; | |
| 205 | }, | |
| 206 | WAIT_TIMEOUT => return error.WaitTimeOut, | |
| 207 | WAIT_FAILED => switch (kernel32.GetLastError()) { | |
| 208 | else => |err| return unexpectedError(err), | |
| 209 | }, | |
| 210 | else => return error.Unexpected, | |
| 211 | } | |
| 212 | } | |
| 213 | ||
| 186 | 214 | pub const FindFirstFileError = error{ |
| 187 | 215 | FileNotFound, |
| 188 | 216 | InvalidUtf8, |
lib/std/os/windows/bits.zig+3| ... | ... | @@ -534,7 +534,10 @@ pub const STARTF_USESTDHANDLES = 0x00000100; |
| 534 | 534 | |
| 535 | 535 | pub const INFINITE = 4294967295; |
| 536 | 536 | |
| 537 | pub const MAXIMUM_WAIT_OBJECTS = 64; | |
| 538 | ||
| 537 | 539 | pub const WAIT_ABANDONED = 0x00000080; |
| 540 | pub const WAIT_ABANDONED_0 = WAIT_ABANDONED + 0; | |
| 538 | 541 | pub const WAIT_OBJECT_0 = 0x00000000; |
| 539 | 542 | pub const WAIT_TIMEOUT = 0x00000102; |
| 540 | 543 | pub const WAIT_FAILED = 0xFFFFFFFF; |
lib/std/os/windows/kernel32.zig+10| ... | ... | @@ -207,6 +207,16 @@ pub extern "kernel32" stdcallcc fn WaitForSingleObject(hHandle: HANDLE, dwMillis |
| 207 | 207 | |
| 208 | 208 | pub extern "kernel32" stdcallcc fn WaitForSingleObjectEx(hHandle: HANDLE, dwMilliseconds: DWORD, bAlertable: BOOL) DWORD; |
| 209 | 209 | |
| 210 | pub extern "kernel32" stdcallcc fn WaitForMultipleObjects(nCount: DWORD, lpHandle: [*]const HANDLE, bWaitAll:BOOL, dwMilliseconds: DWORD) DWORD; | |
| 211 | ||
| 212 | pub extern "kernel32" stdcallcc fn WaitForMultipleObjectsEx( | |
| 213 | nCount: DWORD, | |
| 214 | lpHandle: [*]const HANDLE, | |
| 215 | bWaitAll:BOOL, | |
| 216 | dwMilliseconds: DWORD, | |
| 217 | bAlertable: BOOL, | |
| 218 | ) DWORD; | |
| 219 | ||
| 210 | 220 | pub extern "kernel32" stdcallcc fn WriteFile( |
| 211 | 221 | in_hFile: HANDLE, |
| 212 | 222 | in_lpBuffer: [*]const u8, |