]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/thread/thread.cpp
1. Derive wxMessageDialogBase from wxDialog (why did we use multiple
[wxWidgets.git] / samples / thread / thread.cpp
index e4e71d0928185c021cd730e9be21f60b9c9bfb57..d85db154a444d8a31f3aa468fb912bd2e8a1d17e 100644 (file)
@@ -1,11 +1,11 @@
 /////////////////////////////////////////////////////////////////////////////
 // Name:        thread.cpp
-// Purpose:     wxWindows thread sample
+// Purpose:     wxWidgets thread sample
 // Author:      Guilhem Lavaux, Vadim Zeitlin
 // Modified by:
 // Created:     06/16/98
 // RCS-ID:      $Id$
-// Copyright:   (c) 1998-2002 wxWindows team
+// Copyright:   (c) 1998-2002 wxWidgets team
 // Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 
 
 #include "wx/thread.h"
 #include "wx/dynarray.h"
+#include "wx/numdlg.h"
 
 #include "wx/progdlg.h"
 
+#include "../sample.xpm"
+
 // define this to use wxExecute in the exec tests, otherwise just use system
 #define USE_EXECUTE
 
@@ -46,7 +49,7 @@ class MyApp : public wxApp
 {
 public:
     MyApp();
-    virtual ~MyApp();
+    virtual ~MyApp(){};
 
     virtual bool OnInit();
 
@@ -131,7 +134,8 @@ private:
 // ID for the menu commands
 enum
 {
-    THREAD_QUIT          = 1,
+    THREAD_QUIT  = wxID_EXIT,
+    THREAD_ABOUT = wxID_ABOUT,
     THREAD_TEXT          = 101,
     THREAD_CLEAR,
     THREAD_START_THREAD  = 201,
@@ -145,7 +149,6 @@ enum
     THREAD_EXEC_THREAD,
 
     THREAD_SHOWCPUS,
-    THREAD_ABOUT,
 
     WORKER_EVENT    // this one gets sent from the worker thread
 };
@@ -170,7 +173,7 @@ public:
     void WriteText(const wxString& text);
 
 public:
-    size_t   m_count;
+    unsigned m_count;
     MyFrame *m_frame;
 };
 
@@ -209,7 +212,7 @@ void MyThread::OnExit()
         // waiting for us
         if ( wxGetApp().m_waitingUntilAllDone )
         {
-            wxGetApp().m_waitingUntilAllDone = FALSE;
+            wxGetApp().m_waitingUntilAllDone = false;
 
             wxGetApp().m_semAllDone.Post();
         }
@@ -263,7 +266,7 @@ public:
 
 public:
     MyFrame *m_frame;
-    size_t   m_count;
+    unsigned m_count;
 };
 
 MyWorkerThread::MyWorkerThread(MyFrame *frame)
@@ -354,22 +357,21 @@ END_EVENT_TABLE()
 MyApp::MyApp()
      : m_semAllDone()
 {
-    m_waitingUntilAllDone = FALSE;
-}
-
-MyApp::~MyApp()
-{
+    m_waitingUntilAllDone = false;
 }
 
 // `Main program' equivalent, creating windows and returning main app frame
 bool MyApp::OnInit()
 {
+    if ( !wxApp::OnInit() )
+        return false;
+
     // uncomment this to get some debugging messages from the trace code
     // on the console (or just set WXTRACE env variable to include "thread")
     //wxLog::AddTraceMask("thread");
 
     // Create the main frame window
-    MyFrame *frame = new MyFrame((wxFrame *)NULL, _T("wxWindows threads sample"),
+    MyFrame *frame = new MyFrame((wxFrame *)NULL, _T("wxWidgets threads sample"),
                                  50, 50, 450, 340);
 
     // Make a menubar
@@ -404,27 +406,31 @@ bool MyApp::OnInit()
     menuBar->Append(menuHelp, _T("&Help"));
 
     frame->SetMenuBar(menuBar);
-
+    
     // Show the frame
-    frame->Show(TRUE);
+    frame->Show(true);
 
     SetTopWindow(frame);
 
-    return TRUE;
+    return true;
 }
 
 // My frame constructor
 MyFrame::MyFrame(wxFrame *frame, const wxString& title,
                  int x, int y, int w, int h)
-       : wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h))
+       : wxFrame(frame, wxID_ANY, title, wxPoint(x, y), wxSize(w, h))
 {
+    SetIcon(wxIcon(sample_xpm));
+    
     m_nRunning = m_nCount = 0;
 
     m_dlgProgress = (wxProgressDialog *)NULL;
 
+#if wxUSE_STATUSBAR
     CreateStatusBar(2);
+#endif // wxUSE_STATUSBAR
 
-    m_txtctrl = new wxTextCtrl(this, -1, _T(""), wxPoint(0, 0), wxSize(0, 0),
+    m_txtctrl = new wxTextCtrl(this, wxID_ANY, _T(""), wxPoint(0, 0), wxSize(0, 0),
                                wxTE_MULTILINE | wxTE_READONLY);
 
 }
@@ -449,7 +455,7 @@ MyFrame::~MyFrame()
     if ( count )
     {
         // set the flag for MyThread::OnExit()
-        wxGetApp().m_waitingUntilAllDone = TRUE;
+        wxGetApp().m_waitingUntilAllDone = true;
 
         // stop all threads
         while ( ! threads.IsEmpty() )
@@ -491,7 +497,7 @@ MyThread *MyFrame::CreateThread()
 
 void MyFrame::OnStartThreads(wxCommandEvent& WXUNUSED(event) )
 {
-    static long s_num = 10;
+    static long s_num;
 
     s_num = wxGetNumberFromUser(_T("How many threads to start: "), _T(""),
                                 _T("wxThread sample"), s_num, 1, 10000, this);
@@ -502,7 +508,7 @@ void MyFrame::OnStartThreads(wxCommandEvent& WXUNUSED(event) )
         return;
     }
 
-    size_t count = (size_t)s_num, n;
+    unsigned count = unsigned(s_num), n;
 
     wxArrayThread threads;
 
@@ -524,9 +530,11 @@ void MyFrame::OnStartThreads(wxCommandEvent& WXUNUSED(event) )
         threads.Add(thr);
     }
 
+#if wxUSE_STATUSBAR
     wxString msg;
     msg.Printf(wxT("%d new threads created."), count);
     SetStatusText(msg, 1);
+#endif // wxUSE_STATUSBAR
 
     // ...and then start them
     for ( n = 0; n < count; n++ )
@@ -544,7 +552,9 @@ void MyFrame::OnStartThread(wxCommandEvent& WXUNUSED(event) )
         wxLogError(wxT("Can't start thread!"));
     }
 
+#if wxUSE_STATUSBAR
     SetStatusText(_T("New thread started."), 1);
+#endif // wxUSE_STATUSBAR
 }
 
 void MyFrame::OnStopThread(wxCommandEvent& WXUNUSED(event) )
@@ -569,7 +579,9 @@ void MyFrame::OnStopThread(wxCommandEvent& WXUNUSED(event) )
 
         thread->Delete();
 
+#if wxUSE_STATUSBAR
         SetStatusText(_T("Thread stopped."), 1);
+#endif // wxUSE_STATUSBAR
     }
 }
 
@@ -590,7 +602,9 @@ void MyFrame::OnResumeThread(wxCommandEvent& WXUNUSED(event) )
     {
         wxGetApp().m_threads[n]->Resume();
 
+#if wxUSE_STATUSBAR
         SetStatusText(_T("Thread resumed."), 1);
+#endif // wxUSE_STATUSBAR
     }
 }
 
@@ -611,7 +625,9 @@ void MyFrame::OnPauseThread(wxCommandEvent& WXUNUSED(event) )
     {
         wxGetApp().m_threads[n]->Pause();
 
+#if wxUSE_STATUSBAR
         SetStatusText(_T("Thread paused."), 1);
+#endif // wxUSE_STATUSBAR
     }
 }
 
@@ -634,7 +650,7 @@ void MyFrame::OnIdle(wxIdleEvent& event)
         m_nRunning = nRunning;
         m_nCount = nCount;
 
-        wxLogStatus(this, wxT("%u threads total, %u running."), nCount, nRunning);
+        wxLogStatus(this, wxT("%u threads total, %u running."), unsigned(nCount), unsigned(nRunning));
     }
     //else: avoid flicker - don't print anything
 
@@ -643,7 +659,7 @@ void MyFrame::OnIdle(wxIdleEvent& event)
 
 void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event) )
 {
-    Close(TRUE);
+    Close(true);
 }
 
 void MyFrame::OnExecMain(wxCommandEvent& WXUNUSED(event))
@@ -690,7 +706,7 @@ void MyFrame::OnShowCPUs(wxCommandEvent& WXUNUSED(event))
 void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) )
 {
     wxMessageDialog dialog(this,
-                           _T("wxWindows multithreaded application sample\n")
+                           _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"),
@@ -717,6 +733,7 @@ void MyFrame::OnStartWorker(wxCommandEvent& WXUNUSED(event))
     if ( thread->Create() != wxTHREAD_NO_ERROR )
     {
         wxLogError(wxT("Can't create thread!"));
+        return;
     }
 
     m_dlgProgress = new wxProgressDialog
@@ -733,7 +750,7 @@ void MyFrame::OnStartWorker(wxCommandEvent& WXUNUSED(event))
                         );
 
     // thread is not running yet, no need for crit sect
-    m_cancelled = FALSE;
+    m_cancelled = false;
 
     thread->Run();
 }
@@ -762,7 +779,7 @@ void MyFrame::OnWorkerEvent(wxCommandEvent& event)
         {
             wxCriticalSectionLocker lock(m_critsectWork);
 
-            m_cancelled = TRUE;
+            m_cancelled = true;
         }
     }
 #endif