diff --git a/src/frontend/qt_sdl/EmuThread.cpp b/src/frontend/qt_sdl/EmuThread.cpp index 377677b5..ad6485fd 100644 --- a/src/frontend/qt_sdl/EmuThread.cpp +++ b/src/frontend/qt_sdl/EmuThread.cpp @@ -461,10 +461,10 @@ void EmuThread::sendMessage(Message msg) msgMutex.unlock(); } -void EmuThread::waitMessage() +void EmuThread::waitMessage(int num) { if (QThread::currentThread() == this) return; - msgSemaphore.acquire(); + msgSemaphore.acquire(num); } void EmuThread::waitAllMessages() @@ -537,6 +537,10 @@ void EmuThread::handleMessages() emit windowEmuStop(); break; + case msg_EmuFrameStep: + emuStatus = emuStatus_FrameStep; + break; + case msg_InitGL: emuInstance->initOpenGL(); useOpenGL = true; @@ -610,8 +614,10 @@ void EmuThread::emuExit() void EmuThread::emuFrameStep() { - //if (emuPauseStack < emuPauseStackPauseThreshold) emit windowEmuPause(); - emuStatus = emuStatus_FrameStep; + if (emuPauseStack < emuPauseStackPauseThreshold) + sendMessage(msg_EmuPause); + sendMessage(msg_EmuFrameStep); + waitAllMessages(); } bool EmuThread::emuIsRunning() diff --git a/src/frontend/qt_sdl/EmuThread.h b/src/frontend/qt_sdl/EmuThread.h index 9d3adef1..7d11b2d4 100644 --- a/src/frontend/qt_sdl/EmuThread.h +++ b/src/frontend/qt_sdl/EmuThread.h @@ -63,6 +63,7 @@ public: msg_EmuPause, msg_EmuUnpause, msg_EmuStop, + msg_EmuFrameStep, msg_InitGL, msg_DeInitGL, @@ -78,7 +79,7 @@ public: }; void sendMessage(Message msg); - void waitMessage(); + void waitMessage(int num = 1); void waitAllMessages(); void sendMessage(MessageType type)