MyThreadView.cpp
上传用户:ynjin1970
上传日期:2014-10-13
资源大小:6438k
文件大小:4k
源码类别:

中间件编程

开发平台:

Visual C++

  1. // MyThreadView.cpp : implementation of the CMyThreadView class
  2. //
  3. #include "stdafx.h"
  4. #include "MyThread.h"
  5. #include "MyThreadDoc.h"
  6. #include "MyThreadView.h"
  7. #include "UIThread.h"
  8. #include "MainFrm.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CMyThreadView
  16. IMPLEMENT_DYNCREATE(CMyThreadView, CView)
  17. BEGIN_MESSAGE_MAP(CMyThreadView, CView)
  18. //{{AFX_MSG_MAP(CMyThreadView)
  19. ON_COMMAND(ID_THREAD_RESUME, OnThreadResume)
  20. ON_COMMAND(ID_THREAD_SUSPEND, OnThreadSuspend)
  21. ON_COMMAND(ID_THREAD_UI, OnThreadUi)
  22. ON_COMMAND(ID_THREAD_WORKER, OnThreadWorker)
  23. //}}AFX_MSG_MAP
  24. // Standard printing commands
  25. ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
  26. ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
  27. ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
  28. END_MESSAGE_MAP()
  29. /////////////////////////////////////////////////////////////////////////////
  30. // CMyThreadView construction/destruction
  31. CMyThreadView::CMyThreadView()
  32. {
  33. // TODO: add construction code here
  34. }
  35. CMyThreadView::~CMyThreadView()
  36. {
  37. }
  38. BOOL CMyThreadView::PreCreateWindow(CREATESTRUCT& cs)
  39. {
  40. // TODO: Modify the Window class or styles here by modifying
  41. //  the CREATESTRUCT cs
  42. return CView::PreCreateWindow(cs);
  43. }
  44. /////////////////////////////////////////////////////////////////////////////
  45. // CMyThreadView drawing
  46. void CMyThreadView::OnDraw(CDC* pDC)
  47. {
  48. CMyThreadDoc* pDoc = GetDocument();
  49. ASSERT_VALID(pDoc);
  50. // TODO: add draw code for native data here
  51. }
  52. /////////////////////////////////////////////////////////////////////////////
  53. // CMyThreadView printing
  54. BOOL CMyThreadView::OnPreparePrinting(CPrintInfo* pInfo)
  55. {
  56. // default preparation
  57. return DoPreparePrinting(pInfo);
  58. }
  59. void CMyThreadView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  60. {
  61. // TODO: add extra initialization before printing
  62. }
  63. void CMyThreadView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  64. {
  65. // TODO: add cleanup after printing
  66. }
  67. /////////////////////////////////////////////////////////////////////////////
  68. // CMyThreadView diagnostics
  69. #ifdef _DEBUG
  70. void CMyThreadView::AssertValid() const
  71. {
  72. CView::AssertValid();
  73. }
  74. void CMyThreadView::Dump(CDumpContext& dc) const
  75. {
  76. CView::Dump(dc);
  77. }
  78. CMyThreadDoc* CMyThreadView::GetDocument() // non-debug version is inline
  79. {
  80. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyThreadDoc)));
  81. return (CMyThreadDoc*)m_pDocument;
  82. }
  83. #endif //_DEBUG
  84. /////////////////////////////////////////////////////////////////////////////
  85. // CMyThreadView message handlers
  86. /////////////////////////////////////////////////////////////
  87. //                  工作线程函数                           //
  88. /////////////////////////////////////////////////////////////
  89. UINT  ThreadProc(LPVOID ThreadParam)
  90. {
  91. CDC * pDC;
  92. CMyThreadView * pView;
  93. //获取视图指针,注意包含头文件MainFrm.h
  94. CMainFrame * pFrame = (CMainFrame *)(AfxGetApp()->m_pMainWnd);
  95. pView = (CMyThreadView *)(pFrame->GetActiveView());
  96. pDC = pView->GetDC();  // 获取设备环境
  97. RECT rect;
  98. pView->GetClientRect(&rect);  // 获取客户区大小
  99. int  num = 0;//计数器
  100. CBrush  brush(HS_CROSS, RGB(0,255,0));// 构造一支阴影模式画刷,填充矩形内部
  101. CBrush * poldbrush = pDC->SelectObject(&brush);
  102. // 使用循环画矩形,达到动画效果
  103. do{
  104. num ++;//计数器加1
  105. //画矩形。
  106. pDC->Rectangle(0,rect.bottom-(num/10),300,rect.bottom);
  107. //延迟
  108. Sleep(3); // 每画一个矩形延时3毫秒
  109. }while(num < 4000); // 循环4000次
  110. pDC->SelectObject(poldbrush); //落选画笔
  111. pView->ReleaseDC(pDC); // 释放设备环境
  112. return 1;
  113. }
  114. //唤醒工作线程
  115. void CMyThreadView::OnThreadResume() 
  116. {
  117. if(m_pThread)       // 如果工作线程指针非空
  118. m_pThread->ResumeThread();// 将线程挂起数-1
  119. }
  120. //挂起工作线程
  121. void CMyThreadView::OnThreadSuspend() 
  122. {
  123. if(m_pThread)       // 如果工作线程指针非空
  124. m_pThread->SuspendThread();// 将线程挂起数+1
  125. }
  126. //产生界面线程
  127. void CMyThreadView::OnThreadUi() 
  128. {
  129. //使用AfxBeginThread函数创建用户界面线程,
  130. //并保存新线程对象的指针到m_pUIThread中
  131. m_pUIThread = AfxBeginThread(RUNTIME_CLASS(CUIThread));// 线程类的执行期类指针
  132. }
  133. //产生工作线程
  134. void CMyThreadView::OnThreadWorker() 
  135. {
  136. //使用AfxBeginThread函数创建工作线程,
  137. //并保存新线程对象的指针到m_pThread中
  138. m_pThread = AfxBeginThread(ThreadProc,   // 全局线程函数名字
  139. 0            // 传入的参数
  140. );  
  141. }