1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
#include "csJoinableThread.h"
wxDEFINE_EVENT(wxEVT_THREAD_GOING_DOWN, clCommandEvent);
csJoinableThread::csJoinableThread(wxEvtHandler* manager)
: wxThread(wxTHREAD_JOINABLE)
, m_manager(manager)
{
}
csJoinableThread::~csJoinableThread() { Stop(); }
void csJoinableThread::Stop()
{
// Notify the thread to exit and
// wait for it
if(IsAlive()) {
Delete(NULL, wxTHREAD_WAIT_BLOCK);
} else {
Wait(wxTHREAD_WAIT_BLOCK);
}
}
void csJoinableThread::Start(int priority)
{
Create();
SetPriority(priority);
Run();
}
void csJoinableThread::NotifyGoingDown()
{
clCommandEvent event(wxEVT_THREAD_GOING_DOWN);
event.SetClientData(this);
m_manager->AddPendingEvent(event);
}
|