X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/232addd1cd1515d08ab48335f14f6156363efb82..814028444d682b23af3809227cd485f4bebc1286:/samples/thread/thread.cpp diff --git a/samples/thread/thread.cpp b/samples/thread/thread.cpp index 74afcec5a6..a8529189ed 100644 --- a/samples/thread/thread.cpp +++ b/samples/thread/thread.cpp @@ -5,8 +5,8 @@ // Modified by: // Created: 06/16/98 // RCS-ID: $Id$ -// Copyright: (c) 1998-2002 wxWidgets team -// Licence: wxWindows license +// Copyright: (c) 1998-2009 wxWidgets team +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -351,35 +351,35 @@ MyFrame::MyFrame(const wxString& title) { m_oldLogger = wxLog::GetActiveTarget(); - SetIcon(wxIcon(sample_xpm)); + SetIcon(wxICON(sample)); // Make a menubar wxMenuBar *menuBar = new wxMenuBar; wxMenu *menuFile = new wxMenu; - menuFile->Append(THREAD_CLEAR, _T("&Clear log\tCtrl-L")); + menuFile->Append(THREAD_CLEAR, wxT("&Clear log\tCtrl-L")); menuFile->AppendSeparator(); - menuFile->Append(THREAD_QUIT, _T("E&xit\tAlt-X")); - menuBar->Append(menuFile, _T("&File")); + menuFile->Append(THREAD_QUIT, wxT("E&xit\tAlt-X")); + menuBar->Append(menuFile, wxT("&File")); wxMenu *menuThread = new wxMenu; - menuThread->Append(THREAD_START_THREAD, _T("&Start a new thread\tCtrl-N")); - menuThread->Append(THREAD_START_THREADS, _T("Start &many threads at once")); - menuThread->Append(THREAD_STOP_THREAD, _T("S&top the last spawned thread\tCtrl-S")); + menuThread->Append(THREAD_START_THREAD, wxT("&Start a new thread\tCtrl-N")); + menuThread->Append(THREAD_START_THREADS, wxT("Start &many threads at once")); + menuThread->Append(THREAD_STOP_THREAD, wxT("S&top the last spawned thread\tCtrl-S")); menuThread->AppendSeparator(); - menuThread->Append(THREAD_PAUSE_THREAD, _T("&Pause the last spawned running thread\tCtrl-P")); - menuThread->Append(THREAD_RESUME_THREAD, _T("&Resume the first suspended thread\tCtrl-R")); + menuThread->Append(THREAD_PAUSE_THREAD, wxT("&Pause the last spawned running thread\tCtrl-P")); + menuThread->Append(THREAD_RESUME_THREAD, wxT("&Resume the first suspended thread\tCtrl-R")); menuThread->AppendSeparator(); - menuThread->Append(THREAD_START_WORKER, _T("Start a &worker thread\tCtrl-W")); - menuThread->Append(THREAD_EXEC_MAIN, _T("&Launch a program from main thread\tF5")); - menuThread->Append(THREAD_START_GUI_THREAD, _T("Launch a &GUI thread\tF6")); - menuBar->Append(menuThread, _T("&Thread")); + menuThread->Append(THREAD_START_WORKER, wxT("Start a &worker thread\tCtrl-W")); + menuThread->Append(THREAD_EXEC_MAIN, wxT("&Launch a program from main thread\tF5")); + menuThread->Append(THREAD_START_GUI_THREAD, wxT("Launch a &GUI thread\tF6")); + menuBar->Append(menuThread, wxT("&Thread")); wxMenu *menuHelp = new wxMenu; - menuHelp->Append(THREAD_SHOWCPUS, _T("&Show CPU count")); + menuHelp->Append(THREAD_SHOWCPUS, wxT("&Show CPU count")); menuHelp->AppendSeparator(); - menuHelp->Append(THREAD_ABOUT, _T("&About...")); - menuBar->Append(menuHelp, _T("&Help")); + menuHelp->Append(THREAD_ABOUT, wxT("&About")); + menuBar->Append(menuHelp, wxT("&Help")); SetMenuBar(menuBar); @@ -479,7 +479,7 @@ MyFrame::DoLogRecord(wxLogLevel level, wxDateTime(info.timestamp).FormatISOTime(), info.threadId == wxThread::GetMainId() ? wxString("main") - : wxString::Format("%x", info.threadId), + : wxString::Format("%lx", info.threadId), msg + "\n" ); } @@ -537,8 +537,8 @@ void MyFrame::OnStartThreads(wxCommandEvent& WXUNUSED(event) ) { static long s_num; - s_num = wxGetNumberFromUser(_T("How many threads to start: "), _T(""), - _T("wxThread sample"), s_num, 1, 10000, this); + s_num = wxGetNumberFromUser(wxT("How many threads to start: "), wxT(""), + wxT("wxThread sample"), s_num, 1, 10000, this); if ( s_num == -1 ) { s_num = 10; @@ -591,7 +591,7 @@ void MyFrame::OnStartThread(wxCommandEvent& WXUNUSED(event) ) } #if wxUSE_STATUSBAR - SetStatusText(_T("New thread started."), 1); + SetStatusText(wxT("New thread started."), 1); #endif // wxUSE_STATUSBAR } @@ -609,7 +609,7 @@ void MyFrame::OnStopThread(wxCommandEvent& WXUNUSED(event) ) wxGetApp().m_threads.Last()->Delete(); #if wxUSE_STATUSBAR - SetStatusText(_T("Last thread stopped."), 1); + SetStatusText(wxT("Last thread stopped."), 1); #endif // wxUSE_STATUSBAR } } @@ -632,7 +632,7 @@ void MyFrame::OnResumeThread(wxCommandEvent& WXUNUSED(event) ) wxGetApp().m_threads[n]->Resume(); #if wxUSE_STATUSBAR - SetStatusText(_T("Thread resumed."), 1); + SetStatusText(wxT("Thread resumed."), 1); #endif // wxUSE_STATUSBAR } } @@ -655,7 +655,7 @@ void MyFrame::OnPauseThread(wxCommandEvent& WXUNUSED(event) ) wxGetApp().m_threads[n]->Pause(); #if wxUSE_STATUSBAR - SetStatusText(_T("Thread paused."), 1); + SetStatusText(wxT("Thread paused."), 1); #endif // wxUSE_STATUSBAR } } @@ -697,15 +697,15 @@ void MyFrame::OnShowCPUs(wxCommandEvent& WXUNUSED(event)) switch ( nCPUs ) { case -1: - msg = _T("Unknown number of CPUs"); + msg = wxT("Unknown number of CPUs"); break; case 0: - msg = _T("WARNING: you're running without any CPUs!"); + msg = wxT("WARNING: you're running without any CPUs!"); break; case 1: - msg = _T("This system only has one CPU."); + msg = wxT("This system only has one CPU."); break; default: @@ -718,11 +718,11 @@ void MyFrame::OnShowCPUs(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) ) { wxMessageDialog dialog(this, - _T("wxWidgets multithreaded application sample\n") - _T("(c) 1998 Julian Smart, Guilhem Lavaux\n") - _T("(c) 1999 Vadim Zeitlin\n") - _T("(c) 2000 Robert Roebling"), - _T("About wxThread sample"), + wxT("wxWidgets multithreaded application sample\n") + wxT("(c) 1998 Julian Smart, Guilhem Lavaux\n") + wxT("(c) 2000 Robert Roebling\n") + wxT("(c) 1999,2009 Vadim Zeitlin"), + wxT("About wxThread sample"), wxOK | wxICON_INFORMATION); dialog.ShowModal(); @@ -750,8 +750,8 @@ void MyFrame::OnStartWorker(wxCommandEvent& WXUNUSED(event)) m_dlgProgress = new wxProgressDialog ( - _T("Progress dialog"), - _T("Wait until the thread terminates or press [Cancel]"), + wxT("Progress dialog"), + wxT("Wait until the thread terminates or press [Cancel]"), 100, this, wxPD_CAN_ABORT | @@ -793,6 +793,11 @@ void MyFrame::OnWorkerEvent(wxThreadEvent& event) void MyFrame::OnStartGUIThread(wxCommandEvent& WXUNUSED(event)) { + // we use this to check that disabling logging only affects the main thread + // but the messages from the worker thread will still be logged + wxLogNull noLog; + wxLogMessage("You shouldn't see this message because of wxLogNull"); + MyImageDialog dlg(this); dlg.ShowModal(); @@ -964,7 +969,7 @@ wxThread::ExitCode MyWorkerThread::Entry() 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() ); @@ -979,7 +984,7 @@ wxThread::ExitCode MyWorkerThread::Entry() 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 @@ -988,7 +993,7 @@ wxThread::ExitCode MyWorkerThread::Entry() 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 @@ -1003,6 +1008,19 @@ wxThread::ExitCode MyWorkerThread::Entry() wxThread::ExitCode MyGUIThread::Entry() { + // uncomment this to check that disabling logging here does disable it for + // this thread -- but not the main one if you also comment out wxLogNull + // line in MyFrame::OnStartGUIThread() + //wxLogNull noLog; + + // this goes to the main window + wxLogMessage("GUI thread starting"); + + // use a thread-specific log target for this thread to show that its + // messages don't appear in the main window while it runs + wxLogBuffer logBuf; + wxLog::SetThreadActiveTarget(&logBuf); + for (int i=0; i