wxMenu *menuHelp = new wxMenu;
menuHelp->Append(THREAD_SHOWCPUS, wxT("&Show CPU count"));
menuHelp->AppendSeparator();
- menuHelp->Append(THREAD_ABOUT, wxT("&About..."));
+ menuHelp->Append(THREAD_ABOUT, wxT("&About"));
menuBar->Append(menuHelp, wxT("&Help"));
SetMenuBar(menuBar);
wxDateTime(info.timestamp).FormatISOTime(),
info.threadId == wxThread::GetMainId()
? wxString("main")
- : wxString::Format("%x", info.threadId),
+ : wxString::Format("%lx", info.threadId),
msg + "\n"
);
}
// have the lowest priority, the second - the highest, all the rest
// the normal one
if ( n == 0 )
- thr->SetPriority(WXTHREAD_MIN_PRIORITY);
+ thr->SetPriority(wxPRIORITY_MIN);
else if ( n == 1 )
- thr->SetPriority(WXTHREAD_MAX_PRIORITY);
+ thr->SetPriority(wxPRIORITY_MAX);
else
- thr->SetPriority(WXTHREAD_DEFAULT_PRIORITY);
+ thr->SetPriority(wxPRIORITY_DEFAULT);
threads.Add(thr);
}
void MyFrame::OnStopThread(wxCommandEvent& WXUNUSED(event) )
{
+ wxThread* toDelete = NULL;
+ {
wxCriticalSectionLocker enter(wxGetApp().m_critsect);
// stop the last thread
}
else
{
- wxGetApp().m_threads.Last()->Delete();
+ toDelete = wxGetApp().m_threads.Last();
+ }
+ }
+
+ if ( toDelete )
+ {
+ // This can still crash if the thread gets to delete itself
+ // in the mean time.
+ toDelete->Delete();
#if wxUSE_STATUSBAR
SetStatusText(wxT("Last thread stopped."), 1);
if ( TestDestroy() )
return NULL;
- wxThreadEvent event( wxEVT_COMMAND_THREAD, WORKER_EVENT );
+ wxThreadEvent event( wxEVT_THREAD, WORKER_EVENT );
event.SetInt( 50 );
wxQueueEvent( m_frame, event.Clone() );
break;
// create any type of command event here
- wxThreadEvent event( wxEVT_COMMAND_THREAD, WORKER_EVENT );
+ wxThreadEvent event( wxEVT_THREAD, WORKER_EVENT );
event.SetInt( m_count );
// send in a thread-safe way
wxMilliSleep(200);
}
- wxThreadEvent event( wxEVT_COMMAND_THREAD, WORKER_EVENT );
+ wxThreadEvent event( wxEVT_THREAD, WORKER_EVENT );
event.SetInt(-1); // that's all
wxQueueEvent( m_frame, event.Clone() );
#endif
wxMutexGuiLeave();
// notify the dialog that another piece of our masterpiece is complete:
- wxThreadEvent event( wxEVT_COMMAND_THREAD, GUITHREAD_EVENT );
+ wxThreadEvent event( wxEVT_THREAD, GUITHREAD_EVENT );
event.SetInt(i+1);
wxQueueEvent( m_dlg, event.Clone() );