mirror of
https://github.com/ziglang/zig.git
synced 2026-01-20 14:25:16 +00:00
std: add WaitForMultipleObjects for windows
This commit is contained in:
parent
21ca54f560
commit
78c0d33eb7
@ -183,6 +183,34 @@ pub fn WaitForSingleObjectEx(handle: HANDLE, milliseconds: DWORD, alertable: boo
|
||||
}
|
||||
}
|
||||
|
||||
pub fn WaitForMultipleObjectsEx(handles: []const HANDLE, waitAll: bool, milliseconds: DWORD, alertable: bool) !u32 {
|
||||
assert(handles.len < MAXIMUM_WAIT_OBJECTS);
|
||||
const nCount: DWORD = @intCast(DWORD, handles.len);
|
||||
switch (kernel32.WaitForMultipleObjectsEx(
|
||||
nCount,
|
||||
handles.ptr,
|
||||
@boolToInt(waitAll),
|
||||
milliseconds,
|
||||
@boolToInt(alertable),
|
||||
)) {
|
||||
WAIT_OBJECT_0...WAIT_OBJECT_0 + MAXIMUM_WAIT_OBJECTS => |n| {
|
||||
const handle_index = n - WAIT_OBJECT_0;
|
||||
assert(handle_index < nCount);
|
||||
return handle_index;
|
||||
},
|
||||
WAIT_ABANDONED_0...WAIT_ABANDONED_0 + MAXIMUM_WAIT_OBJECTS => |n| {
|
||||
const handle_index = n - WAIT_ABANDONED_0;
|
||||
assert(handle_index < nCount);
|
||||
return error.WaitAbandoned;
|
||||
},
|
||||
WAIT_TIMEOUT => return error.WaitTimeOut,
|
||||
WAIT_FAILED => switch (kernel32.GetLastError()) {
|
||||
else => |err| return unexpectedError(err),
|
||||
},
|
||||
else => return error.Unexpected,
|
||||
}
|
||||
}
|
||||
|
||||
pub const FindFirstFileError = error{
|
||||
FileNotFound,
|
||||
InvalidUtf8,
|
||||
|
||||
@ -534,7 +534,10 @@ pub const STARTF_USESTDHANDLES = 0x00000100;
|
||||
|
||||
pub const INFINITE = 4294967295;
|
||||
|
||||
pub const MAXIMUM_WAIT_OBJECTS = 64;
|
||||
|
||||
pub const WAIT_ABANDONED = 0x00000080;
|
||||
pub const WAIT_ABANDONED_0 = WAIT_ABANDONED + 0;
|
||||
pub const WAIT_OBJECT_0 = 0x00000000;
|
||||
pub const WAIT_TIMEOUT = 0x00000102;
|
||||
pub const WAIT_FAILED = 0xFFFFFFFF;
|
||||
|
||||
@ -207,6 +207,16 @@ pub extern "kernel32" stdcallcc fn WaitForSingleObject(hHandle: HANDLE, dwMillis
|
||||
|
||||
pub extern "kernel32" stdcallcc fn WaitForSingleObjectEx(hHandle: HANDLE, dwMilliseconds: DWORD, bAlertable: BOOL) DWORD;
|
||||
|
||||
pub extern "kernel32" stdcallcc fn WaitForMultipleObjects(nCount: DWORD, lpHandle: [*]const HANDLE, bWaitAll:BOOL, dwMilliseconds: DWORD) DWORD;
|
||||
|
||||
pub extern "kernel32" stdcallcc fn WaitForMultipleObjectsEx(
|
||||
nCount: DWORD,
|
||||
lpHandle: [*]const HANDLE,
|
||||
bWaitAll:BOOL,
|
||||
dwMilliseconds: DWORD,
|
||||
bAlertable: BOOL,
|
||||
) DWORD;
|
||||
|
||||
pub extern "kernel32" stdcallcc fn WriteFile(
|
||||
in_hFile: HANDLE,
|
||||
in_lpBuffer: [*]const u8,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user