diff --git a/include/wx/event.h b/include/wx/event.h index 307570f727..4733d9207c 100644 --- a/include/wx/event.h +++ b/include/wx/event.h @@ -1073,17 +1073,18 @@ private: class WXDLLIMPEXP_CORE wxThreadEvent : public wxCommandEvent { public: - wxThreadEvent(int id = wxID_ANY) - : wxCommandEvent(wxEVT_COMMAND_THREAD, id) + wxThreadEvent(wxEventType eventType = wxEVT_COMMAND_THREAD, int id = wxID_ANY) + : wxCommandEvent(eventType, id) { } virtual wxEvent *Clone() const { - // make sure our string member (which uses COW aka refcounting) is not - // shared by other string instances: - const_cast(this)->SetString(GetString().c_str()); + wxThreadEvent* ev = new wxThreadEvent(*this); - return new wxThreadEvent(*this); + // make sure our string member (which uses COW, aka refcounting) is not + // shared by other wxString instances: + ev->SetString(GetString().c_str()); + return ev; } // this is important to avoid that calling wxApp::Yield() thread events diff --git a/interface/wx/event.h b/interface/wx/event.h index f4ff7a77c5..c994e77387 100644 --- a/interface/wx/event.h +++ b/interface/wx/event.h @@ -2544,11 +2544,8 @@ class wxThreadEvent : public wxCommandEvent public: /** Constructor. - - Initializes the event type to @c wxEVT_THREAD (but you can change it - using wxEvent::SetEventType. */ - wxThreadEvent(int id = wxID_ANY); + wxThreadEvent(wxEventType eventType = wxEVT_COMMAND_THREAD, int id = wxID_ANY); /** Clones this event making sure that all internal members which use @@ -2560,8 +2557,8 @@ public: /** Returns @c wxEVT_CATEGORY_THREAD. - This is important to avoid that calling wxApp::Yield() thread events - gets processed when this is unwanted: + This is important to avoid unwanted processing of thread events + when calling wxApp::YieldFor(). */ virtual wxEventCategory GetEventCategory() const; }; diff --git a/samples/thread/thread.cpp b/samples/thread/thread.cpp index 2bcdbb87ea..f5ec942d81 100644 --- a/samples/thread/thread.cpp +++ b/samples/thread/thread.cpp @@ -292,7 +292,7 @@ void MyWorkerThread::OnExit() { } -#define TEST_YIELD_RACE_CONDITION 1 +#define TEST_YIELD_RACE_CONDITION 0 void *MyWorkerThread::Entry() { @@ -300,7 +300,7 @@ void *MyWorkerThread::Entry() if ( TestDestroy() ) return NULL; - wxThreadEvent event( WORKER_EVENT ); + wxThreadEvent event( wxEVT_COMMAND_THREAD, WORKER_EVENT ); event.SetInt( 50 ); wxQueueEvent( m_frame, new wxThreadEvent(event) ); @@ -315,7 +315,7 @@ void *MyWorkerThread::Entry() break; // create any type of command event here - wxThreadEvent event( WORKER_EVENT ); + wxThreadEvent event( wxEVT_COMMAND_THREAD, WORKER_EVENT ); event.SetInt( m_count ); // send in a thread-safe way @@ -324,7 +324,7 @@ void *MyWorkerThread::Entry() wxMilliSleep(200); } - wxThreadEvent event( WORKER_EVENT ); + wxThreadEvent event( wxEVT_COMMAND_THREAD, WORKER_EVENT ); event.SetInt(-1); // that's all wxQueueEvent( m_frame, new wxThreadEvent(event) ); #endif