diff --git a/Source/Core/Common/Src/Setup.h b/Source/Core/Common/Src/Setup.h index ff7c7cf126..865ef746a9 100644 --- a/Source/Core/Common/Src/Setup.h +++ b/Source/Core/Common/Src/Setup.h @@ -46,6 +46,9 @@ window, however, I didn't seem to need this any more */ //#define SETUP_AVOID_CHILD_WINDOW_RENDERING_HANG +// Build with playback rerecording options +//#define SETUP_AVOID_OPENGL_SCREEN_MESSAGE_HANG + // Build with playback rerecording options //#define RERECORDING diff --git a/Source/Core/Core/Src/Core.cpp b/Source/Core/Core/Src/Core.cpp index b448a2c59a..694d30951c 100644 --- a/Source/Core/Core/Src/Core.cpp +++ b/Source/Core/Core/Src/Core.cpp @@ -469,6 +469,10 @@ THREAD_RETURN EmuThread(void *pArg) // We have now exited the Video Loop and will shut down // does this comment still apply? + /* JP: Perhaps not, but it's not the first time one of these waiting loops have failed. They seem inherently + dysfunctional because they can hang the very thread they are waiting for, so they should be replaced by timers like I did + in the Wiimote plugin. Or any alterantive that does not hang the thread it's waiting for. Sleep() hangs the other thread to, + just like a loop, so that is not an option. */ /* Check if we are using single core and are rendering to the main window. In that case we must avoid the WaitForSingleObject() loop in the cpu thread thread, because it will hang on occation, perhaps one time in three or so. I had this problem in the Wiimote plugin, what happened was that if I entered the WaitForSingleObject loop or any loop at all in the main thread, the separate thread would halt at a place where it called a function in diff --git a/Source/Core/VideoCommon/Src/Fifo.cpp b/Source/Core/VideoCommon/Src/Fifo.cpp index b3a5ee00e6..8c2940f9af 100644 --- a/Source/Core/VideoCommon/Src/Fifo.cpp +++ b/Source/Core/VideoCommon/Src/Fifo.cpp @@ -20,6 +20,7 @@ #include "MemoryUtil.h" #include "Thread.h" #include "OpcodeDecoding.h" +#include "Setup.h" #include "Fifo.h" @@ -107,7 +108,7 @@ void Fifo_EnterLoop(const SVideoInitialize &video_initialize) while (fifoStateRun) { -#ifdef _WIN32 +#if defined(_WIN32) && !defined(SETUP_AVOID_OPENGL_SCREEN_MESSAGE_HANG) video_initialize.pPeekMessages(); #endif if (_fifo.CPReadWriteDistance == 0)