diff options
| author | lizzie <lizzie@eden-emu.dev> | 2026-05-31 02:32:21 +0200 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2026-05-31 02:32:21 +0200 |
| commit | e94ac63a5e62a7b558ddd0513423e367db6d3369 (patch) | |
| tree | e5d8bdb0b8cef42dea289a99438489cbdd849483 /src/common/thread.cpp | |
| parent | 88ff086d135df1b21da5e4d1f9d7c347efb5b585 (diff) | |
[common/thread] fix MSVC build error with _rdstc (#4029)
fixes issue reported by @bruno
Signed-off-by: lizzie <lizzie@eden-emu.dev>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4029
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Reviewed-by: crueter <crueter@eden-emu.dev>
Diffstat (limited to 'src/common/thread.cpp')
| -rw-r--r-- | src/common/thread.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/common/thread.cpp b/src/common/thread.cpp index 49f6f5cf98..c947c88373 100644 --- a/src/common/thread.cpp +++ b/src/common/thread.cpp @@ -184,7 +184,11 @@ bool Event::WaitFor(const std::chrono::nanoseconds time) { _mm_monitorx(reinterpret_cast<u64*>(std::addressof(is_set)), 0, 0); if (!is_set.load()) { // RDTSC may be fenced here due to atomic load +#ifdef _MSC_VER + auto const now = __rdtsc(); +#else auto const now = _rdtsc(); +#endif if (end > now) { u32 const cycles = std::min<u32>((std::numeric_limits<u32>::max)(), s64(end) - s64(now)); // See here: https://github.com/torvalds/linux/blob/948a64995aca6820abefd17f1a4258f5835c5ad9/arch/x86/lib/delay.c#L93 @@ -213,8 +217,13 @@ bool Event::WaitFor(const std::chrono::nanoseconds time) { return true; } } else { +#ifdef _MSC_VER + while (!is_set.load() && end > __rdtsc()) + Common::Windows::SleepForOneTick(); +#else while (!is_set.load() && end > _rdtsc()) Common::Windows::SleepForOneTick(); +#endif if (is_set.load()) Reset(); return true; |
