From e6412ff8ab37a83765e1b4b8a01443ee021d7dd7 Mon Sep 17 00:00:00 2001 From: Vladimir Olteanu Date: Tue, 20 Jul 2021 11:14:28 +0300 Subject: [PATCH] Use SdlThread in nthread --- Source/nthread.cpp | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/Source/nthread.cpp b/Source/nthread.cpp index f68056503..17d8a978e 100644 --- a/Source/nthread.cpp +++ b/Source/nthread.cpp @@ -8,8 +8,8 @@ #include "gmenu.h" #include "nthread.h" #include "storm/storm.h" -#include "utils/thread.h" #include "utils/sdl_mutex.h" +#include "utils/sdl_thread.h" namespace devilution { @@ -26,14 +26,13 @@ namespace { SdlMutex MemCrit; DWORD gdwDeltaBytesSec; bool nthread_should_run; -SDL_threadID glpNThreadId; char sgbSyncCountdown; uint32_t turn_upper_bit; bool sgbTicsOutOfSync; char sgbPacketCountdown; bool sgbThreadIsRunning; int last_tick; -SDL_Thread *sghThread = nullptr; +SdlThread Thread; void NthreadHandler() { @@ -182,11 +181,7 @@ void nthread_start(bool setTurnUpperBit) sgbThreadIsRunning = false; MemCrit.lock(); nthread_should_run = true; - sghThread = CreateThread(NthreadHandler, &glpNThreadId); - if (sghThread == nullptr) { - const char *err = SDL_GetError(); - app_fatal("nthread2:\n%s", err); - } + Thread = { NthreadHandler }; } } @@ -196,23 +191,23 @@ void nthread_cleanup() gdwTurnsInTransit = 0; gdwNormalMsgSize = 0; gdwLargestMsgSize = 0; - if (sghThread != nullptr && glpNThreadId != SDL_GetThreadID(nullptr)) { + if (Thread.joinable() && Thread.get_id() != this_sdl_thread::get_id()) { if (!sgbThreadIsRunning) MemCrit.unlock(); - SDL_WaitThread(sghThread, nullptr); - sghThread = nullptr; + Thread.join(); } } void nthread_ignore_mutex(bool bStart) { - if (sghThread != nullptr) { - if (bStart) - MemCrit.unlock(); - else - MemCrit.lock(); - sgbThreadIsRunning = bStart; - } + if (!Thread.joinable()) + return; + + if (bStart) + MemCrit.unlock(); + else + MemCrit.lock(); + sgbThreadIsRunning = bStart; } /**