Multy8Dlg.cpp
上传用户:shenmao
上传日期:2014-12-06
资源大小:238k
文件大小:5k
源码类别:

进程与线程

开发平台:

Visual C++

  1. // Multy8Dlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "Multy8.h"
  5. #include "Multy8Dlg.h"
  6. #include "afxmt.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. CCriticalSection critical_section;
  13. char g_Array[10];
  14. UINT WriteW(LPVOID pParam)
  15. {
  16.  CEdit *pEdit=(CEdit*)pParam;
  17.  pEdit->SetWindowText("");
  18.  critical_section.Lock();
  19.  //锁定临界区,其它线程遇到critical_section.Lock();语句时要等待
  20.  //直至执行critical_section.Unlock();语句
  21.  for(int i=0;i<10;i++)
  22.  {
  23.   g_Array[i]='W';
  24.      pEdit->SetWindowText(g_Array);
  25.   Sleep(1000);
  26.  }
  27.  critical_section.Unlock();
  28.  return 0;
  29. }
  30. UINT WriteD(LPVOID pParam)
  31. {
  32.  CEdit *pEdit=(CEdit*)pParam;
  33.  pEdit->SetWindowText("");
  34.  critical_section.Lock();
  35.  //锁定临界区,其它线程遇到critical_section.Lock();语句时要等待
  36.  //直至执行critical_section.Unlock();语句
  37.  for(int i=0;i<10;i++)
  38.  {
  39.   g_Array[i]='D';
  40.      pEdit->SetWindowText(g_Array);
  41.   Sleep(1000);
  42.  }
  43.  critical_section.Unlock();
  44.  return 0;
  45. }
  46. /////////////////////////////////////////////////////////////////////////////
  47. // CAboutDlg dialog used for App About
  48. class CAboutDlg : public CDialog
  49. {
  50. public:
  51. CAboutDlg();
  52. // Dialog Data
  53. //{{AFX_DATA(CAboutDlg)
  54. enum { IDD = IDD_ABOUTBOX };
  55. //}}AFX_DATA
  56. // ClassWizard generated virtual function overrides
  57. //{{AFX_VIRTUAL(CAboutDlg)
  58. protected:
  59. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  60. //}}AFX_VIRTUAL
  61. // Implementation
  62. protected:
  63. //{{AFX_MSG(CAboutDlg)
  64. //}}AFX_MSG
  65. DECLARE_MESSAGE_MAP()
  66. };
  67. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  68. {
  69. //{{AFX_DATA_INIT(CAboutDlg)
  70. //}}AFX_DATA_INIT
  71. }
  72. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  73. {
  74. CDialog::DoDataExchange(pDX);
  75. //{{AFX_DATA_MAP(CAboutDlg)
  76. //}}AFX_DATA_MAP
  77. }
  78. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  79. //{{AFX_MSG_MAP(CAboutDlg)
  80. // No message handlers
  81. //}}AFX_MSG_MAP
  82. END_MESSAGE_MAP()
  83. /////////////////////////////////////////////////////////////////////////////
  84. // CMulty8Dlg dialog
  85. CMulty8Dlg::CMulty8Dlg(CWnd* pParent /*=NULL*/)
  86. : CDialog(CMulty8Dlg::IDD, pParent)
  87. {
  88. //{{AFX_DATA_INIT(CMulty8Dlg)
  89. //}}AFX_DATA_INIT
  90. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  91. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  92. }
  93. void CMulty8Dlg::DoDataExchange(CDataExchange* pDX)
  94. {
  95. CDialog::DoDataExchange(pDX);
  96. //{{AFX_DATA_MAP(CMulty8Dlg)
  97. DDX_Control(pDX, IDC_W, m_ctrlW);
  98. DDX_Control(pDX, IDC_D, m_ctrlD);
  99. //}}AFX_DATA_MAP
  100. }
  101. BEGIN_MESSAGE_MAP(CMulty8Dlg, CDialog)
  102. //{{AFX_MSG_MAP(CMulty8Dlg)
  103. ON_WM_SYSCOMMAND()
  104. ON_WM_PAINT()
  105. ON_WM_QUERYDRAGICON()
  106. ON_BN_CLICKED(IDC_WRITEW, OnWritew)
  107. ON_BN_CLICKED(IDC_WRITED, OnWrited)
  108. //}}AFX_MSG_MAP
  109. END_MESSAGE_MAP()
  110. /////////////////////////////////////////////////////////////////////////////
  111. // CMulty8Dlg message handlers
  112. BOOL CMulty8Dlg::OnInitDialog()
  113. {
  114. CDialog::OnInitDialog();
  115. // Add "About..." menu item to system menu.
  116. // IDM_ABOUTBOX must be in the system command range.
  117. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  118. ASSERT(IDM_ABOUTBOX < 0xF000);
  119. CMenu* pSysMenu = GetSystemMenu(FALSE);
  120. if (pSysMenu != NULL)
  121. {
  122. CString strAboutMenu;
  123. strAboutMenu.LoadString(IDS_ABOUTBOX);
  124. if (!strAboutMenu.IsEmpty())
  125. {
  126. pSysMenu->AppendMenu(MF_SEPARATOR);
  127. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  128. }
  129. }
  130. // Set the icon for this dialog.  The framework does this automatically
  131. //  when the application's main window is not a dialog
  132. SetIcon(m_hIcon, TRUE); // Set big icon
  133. SetIcon(m_hIcon, FALSE); // Set small icon
  134. // TODO: Add extra initialization here
  135. return TRUE;  // return TRUE  unless you set the focus to a control
  136. }
  137. void CMulty8Dlg::OnSysCommand(UINT nID, LPARAM lParam)
  138. {
  139. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  140. {
  141. CAboutDlg dlgAbout;
  142. dlgAbout.DoModal();
  143. }
  144. else
  145. {
  146. CDialog::OnSysCommand(nID, lParam);
  147. }
  148. }
  149. // If you add a minimize button to your dialog, you will need the code below
  150. //  to draw the icon.  For MFC applications using the document/view model,
  151. //  this is automatically done for you by the framework.
  152. void CMulty8Dlg::OnPaint() 
  153. {
  154. if (IsIconic())
  155. {
  156. CPaintDC dc(this); // device context for painting
  157. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  158. // Center icon in client rectangle
  159. int cxIcon = GetSystemMetrics(SM_CXICON);
  160. int cyIcon = GetSystemMetrics(SM_CYICON);
  161. CRect rect;
  162. GetClientRect(&rect);
  163. int x = (rect.Width() - cxIcon + 1) / 2;
  164. int y = (rect.Height() - cyIcon + 1) / 2;
  165. // Draw the icon
  166. dc.DrawIcon(x, y, m_hIcon);
  167. }
  168. else
  169. {
  170. CDialog::OnPaint();
  171. }
  172. }
  173. // The system calls this to obtain the cursor to display while the user drags
  174. //  the minimized window.
  175. HCURSOR CMulty8Dlg::OnQueryDragIcon()
  176. {
  177. return (HCURSOR) m_hIcon;
  178. }
  179. void CMulty8Dlg::OnWritew() 
  180. {
  181. CWinThread *pWriteW=AfxBeginThread(WriteW,
  182.   &m_ctrlW,
  183.   THREAD_PRIORITY_NORMAL,
  184.   0,
  185.   CREATE_SUSPENDED);
  186.  pWriteW->ResumeThread();
  187. }
  188. void CMulty8Dlg::OnWrited() 
  189. {
  190. CWinThread *pWriteD=AfxBeginThread(WriteD,
  191.   &m_ctrlD,
  192.   THREAD_PRIORITY_NORMAL,
  193.   0,
  194.   CREATE_SUSPENDED);
  195.  pWriteD->ResumeThread();
  196. }