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);