mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 23:15:39 +00:00
Fixed WaitForSingleObject() and WaitForMultipleObjects().
svn path=/trunk/; revision=663
This commit is contained in:
parent
3255097117
commit
e0058203bb
1 changed files with 69 additions and 43 deletions
|
@ -158,82 +158,108 @@ CreateMutexW(
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
STDCALL
|
STDCALL
|
||||||
WaitForSingleObject(
|
WaitForSingleObject(HANDLE hHandle,
|
||||||
HANDLE hHandle,
|
DWORD dwMilliseconds)
|
||||||
DWORD dwMilliseconds
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
return WaitForSingleObjectEx(hHandle,dwMilliseconds,FALSE);
|
return WaitForSingleObjectEx(hHandle,dwMilliseconds,FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
DWORD STDCALL WaitForSingleObjectEx(HANDLE hHandle,
|
|
||||||
DWORD dwMilliseconds,
|
DWORD
|
||||||
BOOL bAlertable)
|
STDCALL
|
||||||
|
WaitForSingleObjectEx(HANDLE hHandle,
|
||||||
|
DWORD dwMilliseconds,
|
||||||
|
BOOL bAlertable)
|
||||||
{
|
{
|
||||||
|
|
||||||
NTSTATUS errCode;
|
NTSTATUS errCode;
|
||||||
PLARGE_INTEGER TimePtr;
|
PLARGE_INTEGER TimePtr;
|
||||||
LARGE_INTEGER Time;
|
LARGE_INTEGER Time;
|
||||||
DWORD retCode;
|
DWORD retCode;
|
||||||
|
|
||||||
if (dwMilliseconds == INFINITE)
|
if (dwMilliseconds == INFINITE)
|
||||||
{
|
{
|
||||||
TimePtr = NULL;
|
TimePtr = NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Time.u.LowPart = dwMilliseconds;
|
Time.QuadPart = -10000 * dwMilliseconds;
|
||||||
Time.u.HighPart = 0;
|
|
||||||
TimePtr = &Time;
|
TimePtr = &Time;
|
||||||
}
|
}
|
||||||
|
|
||||||
errCode = NtWaitForSingleObject(hHandle,
|
errCode = NtWaitForSingleObject(hHandle,
|
||||||
(BOOLEAN) bAlertable,
|
(BOOLEAN) bAlertable,
|
||||||
TimePtr);
|
TimePtr);
|
||||||
|
if (errCode == STATUS_TIMEOUT)
|
||||||
|
{
|
||||||
|
return WAIT_TIMEOUT;
|
||||||
|
}
|
||||||
|
else if (errCode == WAIT_OBJECT_0)
|
||||||
|
{
|
||||||
|
return WAIT_OBJECT_0;
|
||||||
|
}
|
||||||
|
|
||||||
retCode = RtlNtStatusToDosError(errCode);
|
retCode = RtlNtStatusToDosError(errCode);
|
||||||
SetLastError(retCode);
|
SetLastError(retCode);
|
||||||
return retCode;
|
|
||||||
|
return 0xFFFFFFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
STDCALL
|
STDCALL
|
||||||
WaitForMultipleObjects(
|
WaitForMultipleObjects(DWORD nCount,
|
||||||
DWORD nCount,
|
CONST HANDLE *lpHandles,
|
||||||
CONST HANDLE * lpHandles,
|
BOOL bWaitAll,
|
||||||
BOOL bWaitAll,
|
DWORD dwMilliseconds)
|
||||||
DWORD dwMilliseconds
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
return WaitForMultipleObjectsEx(nCount,lpHandles,bWaitAll,dwMilliseconds,FALSE);
|
return WaitForMultipleObjectsEx(nCount,lpHandles,bWaitAll,dwMilliseconds,FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
STDCALL
|
STDCALL
|
||||||
WaitForMultipleObjectsEx(
|
WaitForMultipleObjectsEx(DWORD nCount,
|
||||||
DWORD nCount,
|
CONST HANDLE *lpHandles,
|
||||||
CONST HANDLE * lpHandles,
|
BOOL bWaitAll,
|
||||||
BOOL bWaitAll,
|
DWORD dwMilliseconds,
|
||||||
DWORD dwMilliseconds,
|
BOOL bAlertable)
|
||||||
BOOL bAlertable
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
NTSTATUS errCode;
|
NTSTATUS errCode;
|
||||||
LARGE_INTEGER Time;
|
LARGE_INTEGER Time;
|
||||||
DWORD retCode;
|
PLARGE_INTEGER TimePtr;
|
||||||
|
DWORD retCode;
|
||||||
|
|
||||||
Time.u.LowPart = dwMilliseconds;
|
if (dwMilliseconds == INFINITE)
|
||||||
Time.u.HighPart = 0;
|
{
|
||||||
|
TimePtr = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Time.QuadPart = -10000 * dwMilliseconds;
|
||||||
|
TimePtr = &Time;
|
||||||
|
}
|
||||||
|
|
||||||
errCode = NtWaitForMultipleObjects (
|
errCode = NtWaitForMultipleObjects (nCount,
|
||||||
nCount,
|
(PHANDLE)lpHandles,
|
||||||
(PHANDLE)lpHandles,
|
(CINT)bWaitAll,
|
||||||
(CINT)bWaitAll,
|
(BOOLEAN)bAlertable,
|
||||||
(BOOLEAN)bAlertable,
|
TimePtr);
|
||||||
&Time
|
|
||||||
);
|
|
||||||
|
|
||||||
retCode = RtlNtStatusToDosError(errCode);
|
if (errCode == STATUS_TIMEOUT)
|
||||||
SetLastError(retCode);
|
{
|
||||||
return retCode;
|
return WAIT_TIMEOUT;
|
||||||
|
}
|
||||||
|
else if ((errCode >= WAIT_OBJECT_0) &&
|
||||||
|
(errCode <= WAIT_OBJECT_0 + nCount - 1))
|
||||||
|
{
|
||||||
|
return errCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
retCode = RtlNtStatusToDosError(errCode);
|
||||||
|
SetLastError(retCode);
|
||||||
|
|
||||||
|
return 0xFFFFFFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* EOF */
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue