MFC开启线程

来源:互联网 发布:超声成像算法导论 pdf 编辑:程序博客网 时间:2024/06/06 02:27

1 建立一个基于对话框的工程MultiThread5,在对话框IDD_MULTITHREAD5_DIALOG中加入一个编辑框IDC_MILLISECOND,一个按钮IDC_START,标题为“开始” ,一个进度条IDC_PROGRESS1;

2 打开ClassWizard,为编辑框IDC_MILLISECOND添加int型变量m_nMilliSecond,为进度条IDC_PROGRESS1添加CProgressCtrl型变量m_ctrlProgress;

3 在MultiThread5Dlg.h文件中添加一个结构的定义:

    struct threadInfo

      {

                        UINT nMilliSecond;

                        CProgressCtrl* pctrlProgress;

    };

   线程函数的声明:

   UINT ThreadFunc(LPVOID lpParam);

   注意,二者应在类CMultiThread5Dlg的外部

   在类CMultiThread5Dlg内部添加protected型变量:

   CWinThread* pThread;

4  在MultiThread5Dlg.cpp文件中进行如下操作:定义公共变量:

    threadInfo Info;

    双击按钮IDC_START,添加相应消息处理函数:

   void CMultiThread5Dlg::OnStart()

     {

         // TODO: Add your control notification handler code here

        UpdateData(TRUE);

       Info.nMilliSecond=m_nMilliSecond;
        Info.pctrlProgress=&m_ctrlProgress;
        pThread=AfxBeginThread(ThreadFunc,&Info);
     }

5   在函数BOOL CMultiThread3Dlg::OnInitDialog()中添加语句:

  {……// TODO: Add extra initialization here
   m_ctrlProgress.SetRange(0,99);
   m_nMilliSecond=10;
   UpdateData(FALSE);
   return TRUE; 
  }
6   添加线程处理函数:
UINT ThreadFunc(LPVOID lpParam)
{
    threadInfo* pInfo=(threadInfo*)lpParam;
    for(int i=0;i<100;i++)
    {
       int nTemp=pInfo->nMilliSecond;
       pInfo->pctrlProgress->SetPos(i);
       Sleep(nTemp);
     }
 return 0;
}
原创粉丝点击