Thread_Base.h 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #pragma once
  2. #ifdef DRIVERAPI_EXPORTS
  3. #define DRIVERAPI_API __declspec(dllexport)
  4. #else
  5. #define DRIVERAPI_API __declspec(dllimport)
  6. #endif
  7. class DRIVERAPI_API Thread_Base
  8. {
  9. protected:
  10. DWORD m_ThreadID;
  11. HANDLE m_Base_Thread;
  12. HANDLE m_ExitFlag;
  13. HANDLE m_WorkFlag;
  14. virtual bool Exec() = 0;
  15. virtual bool OnStartThread();
  16. virtual bool OnEndThread();
  17. public:
  18. Thread_Base(void);
  19. virtual ~Thread_Base(void);
  20. bool StartThread();
  21. bool StopThread();
  22. INT WaitTheIncommingEvent(DWORD waittime);
  23. bool WaitTheThreadEnd(DWORD waittime);
  24. bool WaitTheThreadEndSign(DWORD waittime);//for Exec Only
  25. void NotifyThreadWork();
  26. DWORD GetTID();
  27. private:
  28. static DWORD WINAPI Thread_Base_Thread(LPVOID pPara);
  29. };
  30. #define WAITROUTINE(x) { INT ret = WaitTheIncommingEvent(x); if(ret == 0) return false; if(ret == -1) return true;}
  31. #define WAIT(p, time) if(p->WaitTheThreadEndSign(time))
  32. #define WAITRETURN(p, time, ret) if(p->WaitTheThreadEndSign(time)) return ret
  33. #define WAITRETURNVOID(p, time) if(p->WaitTheThreadEndSign(time)) return