ServiceThread.cpp
上传用户:leon2013
上传日期:2007-01-10
资源大小:186k
文件大小:2k
源码类别:

杀毒

开发平台:

Visual C++

  1. // ServiceThread.cpp: implementation of the CServiceThread class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "ServiceThread.h"
  5. #include "process.h"
  6. #ifdef _DEBUG
  7. #undef THIS_FILE
  8. static char THIS_FILE[]=__FILE__;
  9. #define new DEBUG_NEW
  10. #endif
  11. //////////////////////////////////////////////////////////////////////
  12. // Construction/Destruction
  13. //////////////////////////////////////////////////////////////////////
  14. CServiceThread::CServiceThread( bool autostart) : m_threadid(0)
  15. {
  16. if (autostart) Start();
  17. }
  18. CServiceThread::~CServiceThread()
  19. {
  20. int timeout=1000;
  21. if (m_threadid>1)
  22. Stop();
  23. else
  24. {
  25. while ((timeout--) && (m_threadid==1))
  26. Sleep(10);
  27. if (!timeout)
  28. TRACE0("<CServiceThread>  Destructor has timed out while waiting for thread to exit.rn");
  29. }
  30. }
  31. CServiceThread& CServiceThread::operator+=(const Properties& parameters)
  32. {
  33. m_parameters += parameters;
  34. return *this;
  35. }
  36. CServiceThread& CServiceThread::operator=(const Properties& parameters)
  37. {
  38. m_parameters = parameters;
  39. return *this;
  40. }
  41. bool CServiceThread::Start()
  42. {
  43. // restart thread if already running
  44. if (Running()) Stop();
  45. m_threadid = _beginthread( s_run,0,(void *)this);
  46. return m_threadid>0;
  47. }
  48. bool CServiceThread::Stop(bool wait)
  49. {
  50. int timeout=1000;
  51. if (Running())
  52. {
  53. m_threadid=1;
  54. if (wait)
  55. while ((m_threadid>0) && (timeout--))
  56. Sleep(10);
  57. }
  58. return (timeout>0);
  59. }
  60. void THREADPROC CServiceThread::s_run(void* importobj)
  61. {
  62. ((CServiceThread*)importobj)->run();
  63. ((CServiceThread*)importobj)->m_threadid=0;
  64. }
  65. void CServiceThread::run()
  66. {
  67. }