Initial re-upload of spice2x-24-08-24
This commit is contained in:
42
external/stepmaniax-sdk/sdk/Windows/SMXHelperThread.cpp
vendored
Normal file
42
external/stepmaniax-sdk/sdk/Windows/SMXHelperThread.cpp
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
#include "SMXHelperThread.h"
|
||||
using namespace SMX;
|
||||
|
||||
SMX::SMXHelperThread::SMXHelperThread(const string &sThreadName):
|
||||
SMXThread(m_Lock)
|
||||
{
|
||||
Start(sThreadName);
|
||||
}
|
||||
|
||||
void SMX::SMXHelperThread::ThreadMain()
|
||||
{
|
||||
m_Lock.Lock();
|
||||
while(true)
|
||||
{
|
||||
vector<function<void()>> funcs;
|
||||
swap(m_FunctionsToCall, funcs);
|
||||
|
||||
// If we're shutting down and have no more functions to call, stop.
|
||||
if(funcs.empty() && m_bShutdown)
|
||||
break;
|
||||
|
||||
// Unlock while we call the queued functions.
|
||||
m_Lock.Unlock();
|
||||
for(auto &func: funcs)
|
||||
func();
|
||||
m_Lock.Lock();
|
||||
|
||||
m_Event.Wait(250);
|
||||
}
|
||||
m_Lock.Unlock();
|
||||
}
|
||||
|
||||
void SMX::SMXHelperThread::RunInThread(function<void()> func)
|
||||
{
|
||||
m_Lock.AssertNotLockedByCurrentThread();
|
||||
|
||||
// Add func to the list, and poke the event to wake up the thread if needed.
|
||||
m_Lock.Lock();
|
||||
m_FunctionsToCall.push_back(func);
|
||||
m_Event.Set();
|
||||
m_Lock.Unlock();
|
||||
}
|
||||
Reference in New Issue
Block a user