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<wxThreadEvent*>(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
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
/**
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;
};
{
}
-#define TEST_YIELD_RACE_CONDITION 1
+#define TEST_YIELD_RACE_CONDITION 0
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) );
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
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