#ifndef _RUNTASK_H_ #define _RUNTASK_H_ class CRunnableTask : public IRunnableTask { public: // *** IUnknown *** virtual STDMETHODIMP_(ULONG) AddRef(void); virtual STDMETHODIMP_(ULONG) Release(void); virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj); // *** IRunnableTask *** virtual STDMETHODIMP Run(void); virtual STDMETHODIMP Kill(BOOL bWait); virtual STDMETHODIMP Suspend(void); virtual STDMETHODIMP Resume(void); virtual STDMETHODIMP_(ULONG) IsRunning(void); // *** pure virtuals *** virtual STDMETHODIMP RunInitRT(void) PURE; virtual STDMETHODIMP KillRT(BOOL bWait) { return S_OK; }; virtual STDMETHODIMP SuspendRT(void) { return S_OK; }; virtual STDMETHODIMP ResumeRT(void) { return InternalResumeRT(); }; virtual STDMETHODIMP InternalResumeRT(void) { _lState = IRTIR_TASK_FINISHED; return S_OK; }; protected: CRunnableTask(DWORD dwFlags); virtual ~CRunnableTask(); LONG _cRef; LONG _lState; DWORD _dwFlags; // RTF_* HANDLE _hDone; #ifdef DEBUG DWORD _dwTaskID; #endif }; // CRunnableTask flags #define RTF_DEFAULT 0x00000000 #define RTF_SUPPORTKILLSUSPEND 0x00000001 #endif // _RUNTASK_H_