X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ee19ab6d804cd61575ca03131888c7d6f2a4daa1..14619f10b0bdb630206607abd0ce0319d45e095a:/samples/thread/thread.cpp?ds=sidebyside diff --git a/samples/thread/thread.cpp b/samples/thread/thread.cpp index 1e5c3ee9fb..7948c35a47 100644 --- a/samples/thread/thread.cpp +++ b/samples/thread/thread.cpp @@ -378,7 +378,7 @@ MyFrame::MyFrame(const wxString& title) 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); @@ -559,11 +559,11 @@ void MyFrame::OnStartThreads(wxCommandEvent& WXUNUSED(event) ) // 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); } @@ -597,6 +597,8 @@ void MyFrame::OnStartThread(wxCommandEvent& WXUNUSED(event) ) void MyFrame::OnStopThread(wxCommandEvent& WXUNUSED(event) ) { + wxThread* toDelete = NULL; + { wxCriticalSectionLocker enter(wxGetApp().m_critsect); // stop the last thread @@ -606,7 +608,15 @@ void MyFrame::OnStopThread(wxCommandEvent& WXUNUSED(event) ) } 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);