- // constructor & destructor.
- wxThread();
- virtual ~wxThread();
-
- // Create a new thread, this method should check there is only one thread
- // running by object.
- wxThreadError Create();
-
- // Destroys the thread immediately if the defer flag isn't true.
- wxThreadError Destroy();
-
- // Pause a running thread
- wxThreadError Pause();
-
- // Resume a paused thread
- wxThreadError Resume();
-
- // Switches on the defer flag.
- void DeferDestroy(bool on);
-
- // Waits for the termination of the thread.
- void *Join();
+ // the return type for the thread function
+ typedef void *ExitCode;
+
+ // static functions
+ // Returns the wxThread object for the calling thread. NULL is returned
+ // if the caller is the main thread (but it's recommended to use
+ // IsMain() and only call This() for threads other than the main one
+ // because NULL is also returned on error). If the thread wasn't
+ // created with wxThread class, the returned value is undefined.
+ static wxThread *This();
+
+ // Returns true if current thread is the main thread.
+ static bool IsMain();
+
+ // Release the rest of our time slice leting the other threads run
+ static void Yield();
+
+ // Sleep during the specified period of time in milliseconds
+ //
+ // NB: at least under MSW worker threads can not call ::wxSleep()!
+ static void Sleep(unsigned long milliseconds);
+
+ // default constructor
+ wxThread();
+
+ // function that change the thread state
+ // create a new thread - call Run() to start it
+ wxThreadError Create();
+
+ // starts execution of the thread - from the moment Run() is called the
+ // execution of wxThread::Entry() may start at any moment, caller
+ // shouldn't suppose that it starts after (or before) Run() returns.
+ wxThreadError Run();
+
+ // stops the thread if it's running and deletes the wxThread object
+ // freeing its memory. This function should also be called if the
+ // Create() or Run() fails to free memory (otherwise it will be done by
+ // the thread itself when it terminates). The return value is the
+ // thread exit code if the thread was gracefully terminated, 0 if it
+ // wasn't running and -1 if an error occured.
+ ExitCode Delete();
+
+ // kills the thread without giving it any chance to clean up - should
+ // not be used in normal circumstances, use Delete() instead. It is a
+ // dangerous function that should only be used in the most extreme
+ // cases! The wxThread object is deleted by Kill() if thread was
+ // killed (i.e. no errors occured).
+ wxThreadError Kill();
+
+ // pause a running thread
+ wxThreadError Pause();
+
+ // resume a paused thread
+ wxThreadError Resume();
+
+ // priority
+ // Sets the priority to "prio": see WXTHREAD_XXX_PRIORITY constants
+ //
+ // NB: the priority can only be set before the thread is created
+ void SetPriority(unsigned int prio);
+
+ // Get the current priority.
+ unsigned int GetPriority() const;
+
+ // Get the thread ID - a platform dependent number which uniquely
+ // identifies a thread inside a process
+ unsigned long GetID() const;
+
+ // thread status inquiries
+ // Returns true if the thread is alive: i.e. running or suspended
+ bool IsAlive() const;
+ // Returns true if the thread is running (not paused, not killed).
+ bool IsRunning() const;
+ // Returns true if the thread is suspended
+ bool IsPaused() const { return IsAlive() && !IsRunning(); }
+
+ // called when the thread exits - in the context of this thread
+ //
+ // NB: this function will not be called if the thread is Kill()ed
+ virtual void OnExit() { }