add a wxEventType argument to wxThreadEvent for coherency with other event classes; rewrite its Clone() function

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58661 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Francesco Montorsi 2009-02-04 19:44:55 +00:00
parent 1e247d6992
commit 74d60f66ee
3 changed files with 14 additions and 16 deletions

View File

@ -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<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

View File

@ -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;
};

View File

@ -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