summaryrefslogtreecommitdiffstats
path: root/src/OSSupport/IsThread.h
diff options
context:
space:
mode:
authorHowaner <franzi.moos@googlemail.com>2015-01-25 00:34:19 +0100
committerHowaner <franzi.moos@googlemail.com>2015-01-25 00:34:19 +0100
commit1eedccc56a1a80b42adbea8dbbe968d42c7fe712 (patch)
treea5fe3fb72a3c3918b2c4ba413c686f718f5d403c /src/OSSupport/IsThread.h
parentC++11 and function rename. (diff)
parentGamosocm support (diff)
downloadcuberite-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.h19
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;
} ;