刚刚测试通过的一个多线程例子, 做成功了,写在这里做个参考。
第一步:定义全局处理函数,该处理函数供线程调用,param是唯一的一个参数(类型LPVOID ,即可根据需要传值),全局参数一般在主文件的cpp的头部定义。
UINT TreadProc(LPVOID param);
第二步:编写该消息处理函数,这里面的param我传入的是一个进度条,以便进行显示
UINT TreadProc(LPVOID param)
{
CProgressCtrl* pro=(CProgressCtrl*)param;
for(int i=1;i<=100;i++){
Sleep(1000);
pro->SetPos(i);
}
return 0;
}
第三步:调用这个函数,我在按钮里调用,方法如下:
CProgressCtrl* progress_ctrl=(CProgressCtrl*)GetDlgItem(IDC_PROGRESS);
AfxBeginThread(TreadProc, progress_ctrl, THREAD_PRIORITY_NORMAL);//前两个参数分别是函数名以及我
//传入的控件的首地址
需要说明的是,这个TreadProc函数要在这段代码所在文件的头部声明一下,仍然是这样:UINT TreadProc(LPVOID param);
要停止该进程也很容易
首先定义一个标识:volatile int threadController;用在循环计算的时候判断是否要继续循环,即:
for(int i=1;i<=100;i++){
while(!threadController)
break;
Sleep(1000);
pro->SetPos(i);
}
在停止线程的按钮里将threadController赋值为0.