X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/db034c5228345497d775ab000b3cd19560f170c1..2d4dcfe1a5883ac8cfe92c2d2963e347e8fed61b:/interface/wx/thread.h?ds=sidebyside diff --git a/interface/wx/thread.h b/interface/wx/thread.h index 3dcb9f3f2a..52b94f3128 100644 --- a/interface/wx/thread.h +++ b/interface/wx/thread.h @@ -3,7 +3,7 @@ // Purpose: interface of all thread-related wxWidgets classes // Author: wxWidgets team // RCS-ID: $Id$ -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -309,14 +309,14 @@ public: char m_data[1024]; wxCriticalSection m_dataCS; // protects field above - DECLARE_EVENT_TABLE() + wxDECLARE_EVENT_TABLE(); }; wxDEFINE_EVENT(wxEVT_COMMAND_MYTHREAD_UPDATE, wxThreadEvent) - BEGIN_EVENT_TABLE(MyFrame, wxFrame) + wxBEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_COMMAND(wxID_ANY, wxEVT_COMMAND_MYTHREAD_UPDATE, MyFrame::OnThreadUpdate) EVT_CLOSE(MyFrame::OnClose) - END_EVENT_TABLE() + wxEND_EVENT_TABLE() void MyFrame::DoStartALongTask() { @@ -454,6 +454,37 @@ public: */ virtual ExitCode Entry() = 0; + /** + Callback called by Delete() before actually deleting the thread. + + This function can be overridden by the derived class to perform some + specific task when the thread is gracefully destroyed. Notice that it + will be executed in the context of the thread that called Delete() and + not in this thread's context. + + TestDestroy() will be true for the thread before OnDelete() gets + executed. + + @since 2.9.2 + + @see OnKill() + */ + virtual void OnDelete(); + + /** + Callback called by Kill() before actually killing the thread. + + This function can be overridden by the derived class to perform some + specific task when the thread is terminated. Notice that it will be + executed in the context of the thread that called Kill() and not + in this thread's context. + + @since 2.9.2 + + @see OnDelete() + */ + virtual void OnKill(); + /** @deprecated Use CreateThread() instead. @@ -518,6 +549,10 @@ enum wxCriticalSectionType @library{wxbase} @category{threading} + @note Critical sections can be used before the wxWidgets library is fully + initialized. In particular, it's safe to create global + wxCriticalSection instances. + @see wxThread, wxCondition, wxCriticalSectionLocker */ class wxCriticalSection @@ -683,15 +718,15 @@ enum MyThread *m_pThread; wxCriticalSection m_pThreadCS; // protects the m_pThread pointer - DECLARE_EVENT_TABLE() + wxDECLARE_EVENT_TABLE(); }; - BEGIN_EVENT_TABLE(MyFrame, wxFrame) + wxBEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_CLOSE(MyFrame::OnClose) EVT_MENU(Minimal_Start, MyFrame::DoStartThread) EVT_COMMAND(wxID_ANY, wxEVT_COMMAND_MYTHREAD_UPDATE, MyFrame::OnThreadUpdate) EVT_COMMAND(wxID_ANY, wxEVT_COMMAND_MYTHREAD_COMPLETED, MyFrame::OnThreadCompletion) - END_EVENT_TABLE() + wxEND_EVENT_TABLE() wxDEFINE_EVENT(wxEVT_COMMAND_MYTHREAD_COMPLETED, wxThreadEvent) wxDEFINE_EVENT(wxEVT_COMMAND_MYTHREAD_UPDATE, wxThreadEvent) @@ -784,7 +819,7 @@ enum if (m_pThread) // does the thread still exist? { - m_out.Printf("MYFRAME: deleting thread"); + wxMessageOutputDebug().Printf("MYFRAME: deleting thread"); if (m_pThread->Delete() != wxTHREAD_NO_ERROR ) wxLogError("Can't delete the thread!"); @@ -989,7 +1024,10 @@ public: /** Returns the platform specific thread ID of the current thread as a long. + This can be used to uniquely identify threads, even if they are not wxThreads. + + @see GetMainId() */ static wxThreadIdType GetCurrentId(); @@ -1007,6 +1045,15 @@ public: */ wxThreadKind GetKind() const; + /** + Returns the thread ID of the main thread. + + @see IsMain() + + @since 2.9.1 + */ + static wxThreadIdType GetMainId(); + /** Gets the priority of the thread, between zero and 100. @@ -1035,6 +1082,11 @@ public: /** Returns @true if the calling thread is the main application thread. + + Main thread in the context of wxWidgets is the one which initialized + the library. + + @see GetMainId(), GetCurrentId() */ static bool IsMain(); @@ -1104,6 +1156,10 @@ public: of detached threads. This function can only be called from another thread context. + + Finally, note that once a thread has completed and its Entry() function + returns, you cannot call Run() on it again (an assert will fail in debug + builds or @c wxTHREAD_RUNNING will be returned in release builds). */ wxThreadError Run();