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

进程与线程

开发平台:

Visual C++

  1. // Multy10Dlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "Multy10.h"
  5. #include "Multy10Dlg.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. /////////////////////////////////////////////////////////////////////////////
  13. // CAboutDlg dialog used for App About
  14. CSemaphore semaphoreWrite(2,2); //资源最多访问线程2个,当前可访问线程数2个 
  15. char g_Array[10]; 
  16. UINT WriteA(LPVOID pParam)
  17. {
  18.  CEdit *pEdit=(CEdit*)pParam;
  19.  pEdit->SetWindowText("");
  20.  WaitForSingleObject(semaphoreWrite.m_hObject,INFINITE);
  21.  CString str;
  22.  for(int i=0;i<10;i++)
  23.  {
  24.         pEdit->GetWindowText(str);
  25.   g_Array[i]='A';
  26.   str=str+g_Array[i];
  27.      pEdit->SetWindowText(str);
  28.   Sleep(1000);
  29.  }
  30.  ReleaseSemaphore(semaphoreWrite.m_hObject,1,NULL);
  31.  return 0;
  32. }
  33. UINT WriteB(LPVOID pParam)
  34. {
  35.  CEdit *pEdit=(CEdit*)pParam;
  36.  pEdit->SetWindowText("");
  37.  WaitForSingleObject(semaphoreWrite.m_hObject,INFINITE);
  38.  CString str;
  39.  for(int i=0;i<10;i++)
  40.  {
  41.         pEdit->GetWindowText(str);
  42.   g_Array[i]='B';
  43.   str=str+g_Array[i];
  44.      pEdit->SetWindowText(str);
  45.   Sleep(1000);
  46.  }
  47.  ReleaseSemaphore(semaphoreWrite.m_hObject,1,NULL);
  48.  return 0;
  49. }
  50. UINT WriteC(LPVOID pParam)
  51. {
  52.  CEdit *pEdit=(CEdit*)pParam;
  53.  pEdit->SetWindowText("");
  54.  WaitForSingleObject(semaphoreWrite.m_hObject,INFINITE);
  55.  CString str;
  56.  for(int i=0;i<10;i++)
  57.  {
  58.         pEdit->GetWindowText(str);
  59.   g_Array[i]='C';
  60.   str=str+g_Array[i];
  61.      pEdit->SetWindowText(str);
  62.   Sleep(1000);
  63.  }
  64.  ReleaseSemaphore(semaphoreWrite.m_hObject,1,NULL);
  65.  return 0;
  66. }
  67. class CAboutDlg : public CDialog
  68. {
  69. public:
  70. CAboutDlg();
  71. // Dialog Data
  72. //{{AFX_DATA(CAboutDlg)
  73. enum { IDD = IDD_ABOUTBOX };
  74. //}}AFX_DATA
  75. // ClassWizard generated virtual function overrides
  76. //{{AFX_VIRTUAL(CAboutDlg)
  77. protected:
  78. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  79. //}}AFX_VIRTUAL
  80. // Implementation
  81. protected:
  82. //{{AFX_MSG(CAboutDlg)
  83. //}}AFX_MSG
  84. DECLARE_MESSAGE_MAP()
  85. };
  86. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  87. {
  88. //{{AFX_DATA_INIT(CAboutDlg)
  89. //}}AFX_DATA_INIT
  90. }
  91. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  92. {
  93. CDialog::DoDataExchange(pDX);
  94. //{{AFX_DATA_MAP(CAboutDlg)
  95. //}}AFX_DATA_MAP
  96. }
  97. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  98. //{{AFX_MSG_MAP(CAboutDlg)
  99. // No message handlers
  100. //}}AFX_MSG_MAP
  101. END_MESSAGE_MAP()
  102. /////////////////////////////////////////////////////////////////////////////
  103. // CMulty10Dlg dialog
  104. CMulty10Dlg::CMulty10Dlg(CWnd* pParent /*=NULL*/)
  105. : CDialog(CMulty10Dlg::IDD, pParent)
  106. {
  107. //{{AFX_DATA_INIT(CMulty10Dlg)
  108. // NOTE: the ClassWizard will add member initialization here
  109. //}}AFX_DATA_INIT
  110. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  111. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  112. }
  113. void CMulty10Dlg::DoDataExchange(CDataExchange* pDX)
  114. {
  115. CDialog::DoDataExchange(pDX);
  116. //{{AFX_DATA_MAP(CMulty10Dlg)
  117. DDX_Control(pDX, IDC_C, m_ctrlC);
  118. DDX_Control(pDX, IDC_B, m_ctrlB);
  119. DDX_Control(pDX, IDC_A, m_ctrlA);
  120. //}}AFX_DATA_MAP
  121. }
  122. BEGIN_MESSAGE_MAP(CMulty10Dlg, CDialog)
  123. //{{AFX_MSG_MAP(CMulty10Dlg)
  124. ON_WM_SYSCOMMAND()
  125. ON_WM_PAINT()
  126. ON_WM_QUERYDRAGICON()
  127. ON_BN_CLICKED(IDC_START, OnStart)
  128. //}}AFX_MSG_MAP
  129. END_MESSAGE_MAP()
  130. /////////////////////////////////////////////////////////////////////////////
  131. // CMulty10Dlg message handlers
  132. BOOL CMulty10Dlg::OnInitDialog()
  133. {
  134. CDialog::OnInitDialog();
  135. // Add "About..." menu item to system menu.
  136. // IDM_ABOUTBOX must be in the system command range.
  137. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  138. ASSERT(IDM_ABOUTBOX < 0xF000);
  139. CMenu* pSysMenu = GetSystemMenu(FALSE);
  140. if (pSysMenu != NULL)
  141. {
  142. CString strAboutMenu;
  143. strAboutMenu.LoadString(IDS_ABOUTBOX);
  144. if (!strAboutMenu.IsEmpty())
  145. {
  146. pSysMenu->AppendMenu(MF_SEPARATOR);
  147. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  148. }
  149. }
  150. // Set the icon for this dialog.  The framework does this automatically
  151. //  when the application's main window is not a dialog
  152. SetIcon(m_hIcon, TRUE); // Set big icon
  153. SetIcon(m_hIcon, FALSE); // Set small icon
  154. // TODO: Add extra initialization here
  155. return TRUE;  // return TRUE  unless you set the focus to a control
  156. }
  157. void CMulty10Dlg::OnSysCommand(UINT nID, LPARAM lParam)
  158. {
  159. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  160. {
  161. CAboutDlg dlgAbout;
  162. dlgAbout.DoModal();
  163. }
  164. else
  165. {
  166. CDialog::OnSysCommand(nID, lParam);
  167. }
  168. }
  169. // If you add a minimize button to your dialog, you will need the code below
  170. //  to draw the icon.  For MFC applications using the document/view model,
  171. //  this is automatically done for you by the framework.
  172. void CMulty10Dlg::OnPaint() 
  173. {
  174. if (IsIconic())
  175. {
  176. CPaintDC dc(this); // device context for painting
  177. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  178. // Center icon in client rectangle
  179. int cxIcon = GetSystemMetrics(SM_CXICON);
  180. int cyIcon = GetSystemMetrics(SM_CYICON);
  181. CRect rect;
  182. GetClientRect(&rect);
  183. int x = (rect.Width() - cxIcon + 1) / 2;
  184. int y = (rect.Height() - cyIcon + 1) / 2;
  185. // Draw the icon
  186. dc.DrawIcon(x, y, m_hIcon);
  187. }
  188. else
  189. {
  190. CDialog::OnPaint();
  191. }
  192. }
  193. // The system calls this to obtain the cursor to display while the user drags
  194. //  the minimized window.
  195. HCURSOR CMulty10Dlg::OnQueryDragIcon()
  196. {
  197. return (HCURSOR) m_hIcon;
  198. }
  199. void CMulty10Dlg::OnStart() 
  200. {
  201.    CWinThread *pWriteC=AfxBeginThread(WriteC,
  202.   &m_ctrlC,
  203.   THREAD_PRIORITY_NORMAL,
  204.   0,
  205.   CREATE_SUSPENDED);
  206.  pWriteC->ResumeThread();
  207.  CWinThread *pWriteA=AfxBeginThread(WriteA,
  208.   &m_ctrlA,
  209.   THREAD_PRIORITY_NORMAL,
  210.   0,
  211.   CREATE_SUSPENDED);
  212.  pWriteA->ResumeThread();
  213.  CWinThread *pWriteB=AfxBeginThread(WriteB,
  214.   &m_ctrlB,
  215.   THREAD_PRIORITY_NORMAL,
  216.   0,
  217.   CREATE_SUSPENDED);
  218.  pWriteB->ResumeThread();
  219. }