WEB开发网
开发学院软件开发VC 多线程编程之四——线程的同步 阅读

多线程编程之四——线程的同步

 2007-03-17 22:00:13 来源:WEB开发网   
核心提示: #include "afxmt.h"定义事件对象和一个字符数组,为了能够在不同线程间使用,多线程编程之四——线程的同步(5),定义为全局变量,CEvent eventWriteD;char g_Array[10];添加线程函数:UINT WriteW(LPVOID pP
#include "afxmt.h"定义事件对象和一个字符数组,为了能够在不同线程间使用,定义为全局变量。CEvent eventWriteD;
char g_Array[10];
添加线程函数:UINT WriteW(LPVOID pParam)
{
  CEdit *pEdit=(CEdit*)pParam;
  pEdit->SetWindowText("");
  for(int i=0;i<10;i++)
  {
    g_Array[i]=''W'';
    pEdit->SetWindowText(g_Array);
    Sleep(1000);
  }
  eventWriteD.SetEvent();
  return 0;
}
UINT WriteD(LPVOID pParam)
{
  CEdit *pEdit=(CEdit*)pParam;
  pEdit->SetWindowText("");
  WaitForSingleObject(eventWriteD.m_hObject,INFINITE);
  for(int i=0;i<10;i++)
  {
    g_Array[i]=''D'';
    pEdit->SetWindowText(g_Array);
    Sleep(1000);
  }
  return 0;
}
  仔细分析这两个线程函数, 您就会正确理解CEvent 类。线程WriteD执行到 WaitForSingleObject(eventWriteD.m_hObject,INFINITE);处等待,直到事件eventWriteD为有信号该线程才往下执行,因为eventWriteD对象是自动事件,则当WaitForSingleObject()返回时,系统自动把eventWriteD对象重置为无信号状态。

双击按钮IDC_WRITEW,添加其响应函数:void CMultiThread9Dlg::OnWritew()
{
  CWinThread *pWriteW=AfxBeginThread(WriteW,
    &m_ctrlW,
    THREAD_PRIORITY_NORMAL,
    0,
    CREATE_SUSPENDED);
  pWriteW->ResumeThread();
  CWinThread *pWriteD=AfxBeginThread(WriteD,
    &m_ctrlD,
    THREAD_PRIORITY_NORMAL,
    0,
    CREATE_SUSPENDED);
  pWriteD->ResumeThread();
  
}
编译并运行程序,单击“写‘W’”按钮,体会事件对象的作用。

上一页  1 2 3 4 5 6 7  下一页

Tags:线程 编程 线程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接