#pragma once #ifdef DRIVERAPI_EXPORTS #define DRIVERAPI_API __declspec(dllexport) #else #define DRIVERAPI_API __declspec(dllimport) #endif class DRIVERAPI_API Thread_Base { protected: DWORD m_ThreadID; HANDLE m_Base_Thread; HANDLE m_ExitFlag; HANDLE m_WorkFlag; virtual bool Exec() = 0; virtual bool OnStartThread(); virtual bool OnEndThread(); public: Thread_Base(void); virtual ~Thread_Base(void); bool StartThread(); bool StopThread(); INT WaitTheIncommingEvent(DWORD waittime); bool WaitTheThreadEnd(DWORD waittime); bool WaitTheThreadEndSign(DWORD waittime);//for Exec Only void NotifyThreadWork(); DWORD GetTID(); private: static DWORD WINAPI Thread_Base_Thread(LPVOID pPara); }; #define WAITROUTINE(x) { INT ret = WaitTheIncommingEvent(x); if(ret == 0) return false; if(ret == -1) return true;} #define WAIT(p, time) if(p->WaitTheThreadEndSign(time)) #define WAITRETURN(p, time, ret) if(p->WaitTheThreadEndSign(time)) return ret #define WAITRETURNVOID(p, time) if(p->WaitTheThreadEndSign(time)) return