proper termination

pull/70/head
orignal 10 years ago
parent 7bee253e46
commit 42f228e75a

@ -46,6 +46,12 @@ namespace util
return el;
}
void Wait ()
{
std::unique_lock<std::mutex> l(m_QueueMutex);
m_NonEmpty.wait (l);
}
bool Wait (int sec, int usec)
{
std::unique_lock<std::mutex> l(m_QueueMutex);
@ -98,27 +104,33 @@ namespace util
{
public:
MsgQueue (): m_Thread (std::bind (&MsgQueue<Msg>::Run, this)) , running(1) {};
MsgQueue (): m_IsRunning (true), m_Thread (std::bind (&MsgQueue<Msg>::Run, this)) {};
void Stop()
{
running = 0;
m_IsRunning = false;
Queue<Msg>::WakeUp ();
m_Thread.join();
}
private:
void Run ()
{
Msg * msg = nullptr;
while ((msg = Queue<Msg>::GetNext ()) != nullptr && running)
while (m_IsRunning)
{
msg->Process ();
delete msg;
while (Msg * msg = Queue<Msg>::Get ())
{
msg->Process ();
delete msg;
}
Queue<Msg>::Wait ();
}
}
private:
std::thread m_Thread;
volatile int running;
bool m_IsRunning;
std::thread m_Thread;
};
}
}

Loading…
Cancel
Save