WEB开发网
开发学院软件开发VC 多线程编程之一——问题提出 阅读

多线程编程之一——问题提出

 2007-03-17 22:00:03 来源:WEB开发网   
核心提示: 在MultiThread1Dlg.h文件中添加线程函数声明:void ThreadFunc();注意,线程函数的声明应在类CMultiThread1Dlg的外部,多线程编程之一——问题提出(4), 在类CMultiThread1Dlg内部添加protected型变量:HANDLE hThr

在MultiThread1Dlg.h文件中添加线程函数声明:void ThreadFunc();注意,线程函数的声明应在类CMultiThread1Dlg的外部。 在类CMultiThread1Dlg内部添加protected型变量:  HANDLE hThread;
  DWORD ThreadID;
分别代表线程的句柄和ID。

在MultiThread1Dlg.cpp文件中添加全局变量m_bRun :volatile BOOL m_bRun;m_bRun 代表线程是否正在运行。

你要留意到全局变量 m_bRun 是使用 volatile 修饰符的,volatile 修饰符的作用是告诉编译器无需对该变量作任何的优化,即无需将它放到一个寄存器中,并且该值可被外部改变。对于多线程引用的全局变量来说,volatile 是一个非常重要的修饰符。

编写线程函数:void ThreadFunc()
{
  CTime time;
  CString strTime;
  m_bRun=TRUE;
  while(m_bRun)
  {
    time=CTime::GetCurrentTime();
    strTime=time.Format("%H:%M:%S");
    ::SetDlgItemText(AfxGetMainWnd()->m_hWnd,IDC_TIME,strTime);
    Sleep(1000);
  }
}
该线程函数没有参数,也不返回函数值。只要m_bRun为TRUE,线程一直运行。

双击IDC_START按钮,完成该按钮的消息函数:void CMultiThread1Dlg::OnStart()
{
  // TODO: Add your control notification handler code here
  hThread=CreateThread(NULL,
    0,
    (LPTHREAD_START_ROUTINE)ThreadFunc,
    NULL,
    0,
    &ThreadID);
  GetDlgItem(IDC_START)->EnableWindow(FALSE);
  GetDlgItem(IDC_STOP)->EnableWindow(TRUE);
}
双击IDC_STOP按钮,完成该按钮的消息函数:void CMultiThread1Dlg::OnStop()
{
  // TODO: Add your control notification handler code here
  m_bRun=FALSE;
  GetDlgItem(IDC_START)->EnableWindow(TRUE);
  GetDlgItem(IDC_STOP)->EnableWindow(FALSE);
}
编译并运行该例程,体会使用Win32 API编写的多线程。

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

Tags:线程 编程 之一

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