platform/shared/common/RhoThread.h in rhodes-2.0.2 vs platform/shared/common/RhoThread.h in rhodes-2.0.3

- old
+ new

@@ -1,30 +1,44 @@ #pragma once +#include "RhoStd.h" #include "IRhoThreadImpl.h" #include "AutoPointer.h" namespace rho { namespace common { struct IRhoClassFactory; class CRhoThread : public IRhoRunnable { CAutoPtr<IRhoThreadImpl> m_pImpl; - bool m_isInWaitState; - bool m_bStop; + static const int TS_NONE = 0; + static const int TS_WAIT = 1; + static const int TS_STOPPING = 2; + static const int TS_RUNNING = 4; + + int m_nState; public: CRhoThread(IRhoClassFactory* factory); - virtual ~CRhoThread(void){} + virtual ~CRhoThread(void){}; virtual void start(EPriority ePriority); - virtual void stop(unsigned int nTimeoutToKill){ m_bStop = true; m_pImpl->stop(nTimeoutToKill); } - virtual void wait(unsigned int nTimeout){ m_isInWaitState = true; m_pImpl->wait(nTimeout); m_isInWaitState = false; } - virtual void stopWait(){ if (m_isInWaitState) m_pImpl->stopWait(); } + virtual void stop(unsigned int nTimeoutToKill){ m_nState |= TS_STOPPING; m_pImpl->stop(nTimeoutToKill); m_nState &= ~TS_STOPPING; } + virtual void wait(unsigned int nTimeout){ m_nState |= TS_WAIT; m_pImpl->wait(nTimeout); m_nState &= ~TS_WAIT; } + virtual void stopWait(){ if (isWaiting()) m_pImpl->stopWait(); } virtual void sleep(unsigned int nTimeout){ m_pImpl->sleep(nTimeout); } + virtual void run() = 0; + virtual void runObject() + { + run(); + m_nState = TS_NONE; + } - bool isStopped(){return m_bStop;} + boolean isStopping(){return (m_nState&TS_STOPPING) != 0;} + boolean isWaiting(){return (m_nState&TS_WAIT) != 0;} + boolean isRunning(){return (m_nState&TS_RUNNING) != 0;} + }; } }