mirror of
https://github.com/wolfpld/tracy.git
synced 2024-11-29 16:54:35 +00:00
32 lines
629 B
C++
32 lines
629 B
C++
|
#include "RunQueue.hpp"
|
||
|
|
||
|
RunQueue::RunQueue()
|
||
|
: m_mainThread( std::this_thread::get_id() )
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void RunQueue::Queue( std::function<void()> cb, bool forceDelay )
|
||
|
{
|
||
|
if( !forceDelay && std::this_thread::get_id() == m_mainThread )
|
||
|
{
|
||
|
cb();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
std::lock_guard<std::mutex> lock( m_lock );
|
||
|
m_queue.emplace_back( cb );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void RunQueue::Run()
|
||
|
{
|
||
|
std::unique_lock<std::mutex> lock( m_lock );
|
||
|
if( !m_queue.empty() )
|
||
|
{
|
||
|
std::vector<std::function<void()>> tmp;
|
||
|
std::swap( tmp, m_queue );
|
||
|
lock.unlock();
|
||
|
for( auto& cb : tmp ) cb();
|
||
|
}
|
||
|
}
|