Thread.cpp
上传用户:chenhai826
上传日期:2007-04-11
资源大小:72k
文件大小:2k
源码类别:

破解

开发平台:

Visual C++

  1. // Thread.cpp : implementation file of class CThread
  2. // Created by liangml 2000-7-30
  3. #include "stdafx.h"
  4. #include "Thread.h"
  5. #ifdef _DEBUG
  6. #define new DEBUG_NEW
  7. #undef THIS_FILE
  8. static char THIS_FILE[] = __FILE__;
  9. #endif
  10. // m_hSomeoneDead is used to signal that one or more threads have ended
  11. //  (it is an auto-reset event; and starts out not signaled)
  12. HANDLE CThread::m_hSomeoneDead = CreateEvent(NULL, FALSE, FALSE, NULL);
  13. CThread::CThread(CWnd *pWnd)
  14. {
  15. m_bAutoDelete = FALSE;
  16. m_pMainWnd = pWnd;
  17. // kill event starts out in the signaled state
  18. m_hEventKill = CreateEvent(NULL,TRUE,FALSE,NULL);
  19. m_hEventDead = CreateEvent(NULL,TRUE,FALSE,NULL);
  20. }
  21. CThread::~CThread()
  22. {
  23. CloseHandle(m_hEventKill);
  24. CloseHandle(m_hEventDead);
  25. }
  26. void CThread::Delete()
  27. {
  28. CWinThread::Delete();
  29. VERIFY(SetEvent(m_hEventDead));
  30. // VERIFY(SetEvent(m_hSomeoneDead));
  31. }
  32. BOOL CThread::InitInstance()
  33. {
  34. if(InitWork())
  35. {
  36. while(WaitForSingleObject(m_hEventKill,0) == WAIT_TIMEOUT)
  37. {
  38. if(Work() == FALSE)
  39. {
  40. break;
  41. }
  42. }
  43. CleanupWork();
  44. }
  45. // avoid entering standard message loop by returning FALSE
  46. return FALSE;
  47. }
  48. void CThread::KillThread()
  49. {
  50. // Note: this function is called in the context of other threads,
  51. //  not the thread itself.
  52. // reset the m_hEventKill which signals the thread to shutdown
  53. VERIFY(SetEvent(m_hEventKill));
  54. // allow thread to run at higher priority during kill process
  55. SetThreadPriority(THREAD_PRIORITY_ABOVE_NORMAL);
  56. WaitForSingleObject(m_hEventDead, INFINITE);
  57. WaitForSingleObject(m_hThread, INFINITE);
  58. // now delete CWinThread object since no longer necessary
  59. delete this;
  60. }