diff options
author | Howaner <franzi.moos@googlemail.com> | 2015-01-25 00:34:19 +0100 |
---|---|---|
committer | Howaner <franzi.moos@googlemail.com> | 2015-01-25 00:34:19 +0100 |
commit | 1eedccc56a1a80b42adbea8dbbe968d42c7fe712 (patch) | |
tree | a5fe3fb72a3c3918b2c4ba413c686f718f5d403c /src/OSSupport/IsThread.h | |
parent | C++11 and function rename. (diff) | |
parent | Gamosocm support (diff) | |
download | cuberite-1eedccc56a1a80b42adbea8dbbe968d42c7fe712.tar cuberite-1eedccc56a1a80b42adbea8dbbe968d42c7fe712.tar.gz cuberite-1eedccc56a1a80b42adbea8dbbe968d42c7fe712.tar.bz2 cuberite-1eedccc56a1a80b42adbea8dbbe968d42c7fe712.tar.lz cuberite-1eedccc56a1a80b42adbea8dbbe968d42c7fe712.tar.xz cuberite-1eedccc56a1a80b42adbea8dbbe968d42c7fe712.tar.zst cuberite-1eedccc56a1a80b42adbea8dbbe968d42c7fe712.zip |
Diffstat (limited to 'src/OSSupport/IsThread.h')
-rw-r--r-- | src/OSSupport/IsThread.h | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/OSSupport/IsThread.h b/src/OSSupport/IsThread.h index 131c6950e..f642c8724 100644 --- a/src/OSSupport/IsThread.h +++ b/src/OSSupport/IsThread.h @@ -25,23 +25,28 @@ In the descending class' constructor call the Start() method to start the thread class cIsThread { protected: - /// This is the main thread entrypoint + /** This is the main thread entrypoint. + This function, overloaded by the descendants, is called in the new thread. */ virtual void Execute(void) = 0; - /// The overriden Execute() method should check this value periodically and terminate if this is true + /** The overriden Execute() method should check this value periodically and terminate if this is true. */ volatile bool m_ShouldTerminate; +private: + /** Wrapper for Execute() that waits for the initialization event, to prevent race conditions in thread initialization. */ + void DoExecute(void); + public: cIsThread(const AString & a_ThreadName); virtual ~cIsThread(); - /// Starts the thread; returns without waiting for the actual start + /** Starts the thread; returns without waiting for the actual start. */ bool Start(void); - /// Signals the thread to terminate and waits until it's finished + /** Signals the thread to terminate and waits until it's finished. */ void Stop(void); - /// Waits for the thread to finish. Doesn't signalize the ShouldTerminate flag + /** Waits for the thread to finish. Doesn't signalize the ShouldTerminate flag. */ bool Wait(void); /** Returns true if the thread calling this function is the thread contained within this object. */ @@ -50,6 +55,10 @@ public: protected: AString m_ThreadName; std::thread m_Thread; + + /** The event that is used to wait with the thread's execution until the thread object is fully initialized. + This prevents the IsCurrentThread() call to fail because of a race-condition. */ + cEvent m_evtStart; } ; |