Fix Wiimote thread wakeup on externally-triggered destroy.

This commit is contained in:
comex 2013-09-04 05:30:16 -04:00
parent dc87b6d431
commit 8992f58720
2 changed files with 9 additions and 2 deletions

View File

@ -503,11 +503,14 @@ bool Wiimote::Connect()
void Wiimote::StartThread()
{
m_run_thread = true;
m_wiimote_thread = std::thread(std::mem_fun(&Wiimote::ThreadFunc), this);
}
void Wiimote::StopThread()
{
m_run_thread = false;
IOWakeup();
if (m_wiimote_thread.joinable())
m_wiimote_thread.join();
#if defined(__APPLE__)
@ -554,7 +557,7 @@ void Wiimote::ThreadFunc()
}
// main loop
while (IsConnected())
while (IsConnected() && m_run_thread)
{
if (m_need_prepare)
{

View File

@ -113,8 +113,12 @@ private:
bool m_rumble_state;
std::thread m_wiimote_thread;
volatile bool m_thread_ready;
// Whether to keep running the thread.
volatile bool m_run_thread;
// Whether to call PrepareOnThread.
volatile bool m_need_prepare;
// Whether the thread has finished ConnectInternal.
volatile bool m_thread_ready;
std::mutex m_thread_ready_mutex;
std::condition_variable m_thread_ready_cond;