Browse Source

Use SdlThread in nthread

pull/2443/head
Vladimir Olteanu 5 years ago committed by Anders Jenbo
parent
commit
e6412ff8ab
  1. 31
      Source/nthread.cpp

31
Source/nthread.cpp

@ -8,8 +8,8 @@
#include "gmenu.h" #include "gmenu.h"
#include "nthread.h" #include "nthread.h"
#include "storm/storm.h" #include "storm/storm.h"
#include "utils/thread.h"
#include "utils/sdl_mutex.h" #include "utils/sdl_mutex.h"
#include "utils/sdl_thread.h"
namespace devilution { namespace devilution {
@ -26,14 +26,13 @@ namespace {
SdlMutex MemCrit; SdlMutex MemCrit;
DWORD gdwDeltaBytesSec; DWORD gdwDeltaBytesSec;
bool nthread_should_run; bool nthread_should_run;
SDL_threadID glpNThreadId;
char sgbSyncCountdown; char sgbSyncCountdown;
uint32_t turn_upper_bit; uint32_t turn_upper_bit;
bool sgbTicsOutOfSync; bool sgbTicsOutOfSync;
char sgbPacketCountdown; char sgbPacketCountdown;
bool sgbThreadIsRunning; bool sgbThreadIsRunning;
int last_tick; int last_tick;
SDL_Thread *sghThread = nullptr; SdlThread Thread;
void NthreadHandler() void NthreadHandler()
{ {
@ -182,11 +181,7 @@ void nthread_start(bool setTurnUpperBit)
sgbThreadIsRunning = false; sgbThreadIsRunning = false;
MemCrit.lock(); MemCrit.lock();
nthread_should_run = true; nthread_should_run = true;
sghThread = CreateThread(NthreadHandler, &glpNThreadId); Thread = { NthreadHandler };
if (sghThread == nullptr) {
const char *err = SDL_GetError();
app_fatal("nthread2:\n%s", err);
}
} }
} }
@ -196,23 +191,23 @@ void nthread_cleanup()
gdwTurnsInTransit = 0; gdwTurnsInTransit = 0;
gdwNormalMsgSize = 0; gdwNormalMsgSize = 0;
gdwLargestMsgSize = 0; gdwLargestMsgSize = 0;
if (sghThread != nullptr && glpNThreadId != SDL_GetThreadID(nullptr)) { if (Thread.joinable() && Thread.get_id() != this_sdl_thread::get_id()) {
if (!sgbThreadIsRunning) if (!sgbThreadIsRunning)
MemCrit.unlock(); MemCrit.unlock();
SDL_WaitThread(sghThread, nullptr); Thread.join();
sghThread = nullptr;
} }
} }
void nthread_ignore_mutex(bool bStart) void nthread_ignore_mutex(bool bStart)
{ {
if (sghThread != nullptr) { if (!Thread.joinable())
if (bStart) return;
MemCrit.unlock();
else if (bStart)
MemCrit.lock(); MemCrit.unlock();
sgbThreadIsRunning = bStart; else
} MemCrit.lock();
sgbThreadIsRunning = bStart;
} }
/** /**

Loading…
Cancel
Save