From 7c8fdc1651b01144994dad3daaf5c47f62ed8415 Mon Sep 17 00:00:00 2001 From: Billy Laws Date: Sat, 13 Dec 2025 14:53:07 +0000 Subject: [PATCH] WinAPI: Implement Sleep Used by std::this_thread::sleep. --- Source/Windows/Common/WinAPI/Sync.cpp | 5 ++++- Source/Windows/include/winternl.h | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Source/Windows/Common/WinAPI/Sync.cpp b/Source/Windows/Common/WinAPI/Sync.cpp index 88047a4c7..62a684c30 100644 --- a/Source/Windows/Common/WinAPI/Sync.cpp +++ b/Source/Windows/Common/WinAPI/Sync.cpp @@ -133,5 +133,8 @@ DLLEXPORT_FUNC(WINBOOL, SwitchToThread, ()) { } DLLEXPORT_FUNC(void, Sleep, (DWORD dwMilliseconds)) { - UNIMPLEMENTED(); + LARGE_INTEGER Time; + // A negative value indicates a relative time measured in 100ns intervals. + Time.QuadPart = static_cast(dwMilliseconds) * -10000; + NtDelayExecution(false, &Time); } diff --git a/Source/Windows/include/winternl.h b/Source/Windows/include/winternl.h index efd211c5a..686cc0036 100644 --- a/Source/Windows/include/winternl.h +++ b/Source/Windows/include/winternl.h @@ -497,6 +497,7 @@ NTSTATUS WINAPI NtAllocateVirtualMemoryEx(HANDLE, PVOID*, SIZE_T*, ULONG, ULONG, NTSTATUS WINAPI NtAllocateVirtualMemory(HANDLE, PVOID*, ULONG_PTR, SIZE_T*, ULONG, ULONG); NTSTATUS WINAPI NtContinue(PCONTEXT, BOOLEAN); NTSTATUS WINAPI NtCreateSection(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*, const LARGE_INTEGER*, ULONG, ULONG, HANDLE); +NTSTATUS WINAPI NtDelayExecution(BOOLEAN, const LARGE_INTEGER*); NTSTATUS WINAPI NtDuplicateObject(HANDLE, HANDLE, HANDLE, PHANDLE, ACCESS_MASK, ULONG, ULONG); NTSTATUS WINAPI NtFlushInstructionCache(HANDLE, LPCVOID, SIZE_T); NTSTATUS WINAPI NtFreeVirtualMemory(HANDLE, PVOID*, SIZE_T*, ULONG);