PingThread.cpp
上传用户:qzzxgm
上传日期:2009-12-14
资源大小:1882k
文件大小:2k
源码类别:

书籍源码

开发平台:

Visual C++

  1. // PingThread.cpp: implementation of the CPingThread class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "winping.h"
  6. #include "PingThread.h"
  7. #include <process.h>    /* _beginthread, _endthread */
  8. #ifdef _DEBUG
  9. #undef THIS_FILE
  10. static char THIS_FILE[]=__FILE__;
  11. #define new DEBUG_NEW
  12. #endif
  13. //////////////////////////////////////////////////////////////////////
  14. // Construction/Destruction
  15. //////////////////////////////////////////////////////////////////////
  16. CPingThread::CPingThread()
  17. {
  18. m_dwID = 0;  
  19. m_hThread = NULL;
  20. //创建信号事件
  21. m_hKillEvent =   CreateEvent(NULL,TRUE,FALSE,NULL);
  22. m_hSignalEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
  23. //开是一个ping线程
  24. m_hThread = (HANDLE) _beginthreadex(NULL,
  25. 0,
  26. ThreadProc,     
  27. (void*) this,       
  28. 0,
  29. &m_dwID);
  30. }
  31. CPingThread::~CPingThread()
  32. {
  33. SetEvent(m_hKillEvent);
  34. WaitForSingleObject(m_hThread,INFINITE);
  35. }
  36. //ping线程过程函数
  37. UINT CPingThread::ThreadProc(void* lpParam)
  38. {
  39. CPingThread* pThis = reinterpret_cast<CPingThread*>(lpParam);
  40. while (1)
  41. {
  42. HANDLE hObjects[2];
  43. hObjects[0] = pThis->m_hKillEvent;
  44. hObjects[1] = pThis->m_hSignalEvent;
  45. //等待信号有效
  46. DWORD dwWait = WaitForMultipleObjects(2,hObjects,FALSE,INFINITE);
  47. if (dwWait == WAIT_OBJECT_0)
  48. break;
  49. //开始ping
  50. if (dwWait == WAIT_OBJECT_0 + 1)
  51. pThis->m_ping.Ping(pThis->m_nRetries,pThis->m_strHost, pThis->m_hWnd);
  52. }
  53. return 0;
  54. }
  55. //开始ping
  56. void CPingThread::StartPing(UINT nRetries,CString strHost, HWND hWnd)
  57. {
  58. m_nRetries = nRetries;
  59. m_strHost = strHost;
  60. m_hWnd = hWnd;
  61. //设置信号有效,可以开始线程了
  62. SetEvent(m_hSignalEvent);
  63. }