Example #1
0
void EventDispatcher::start()
{
	unique_lock<mutex> uk(sMtx);
	if (started == true)
		return;

	started = true;
	uk.unlock();

	for (size_t i = 0; i < THREAD_SIZE; i++)
	{
		thread([]()
		{
			while (true)
			{
				while (true)
				{
					unique_lock<mutex> uk(sMtx);
					if (eventMap.empty() == true)
						break;

					auto pair = *eventMap.begin();
					eventMap.erase(eventMap.begin());
					
					uk.unlock();

					EventDispatcher *obj = pair.first;
					shared_ptr<Event> &event = pair.second;

					obj->deliver(event);
				}
				
				unique_lock<mutex> cv_uk(cv_mtx);
				cv.wait(cv_uk);
			}
		}).detach();
	}
}