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;}
+
};
}
}