MFC 工作者线程实例(图)

        工作者线程一般用于后台复杂的计算,它没有窗口界面,通常只是一些函数组成。下面是实例:

        关键知识:线程同步、线程创建。其中涉及到类 CEvent、函数AfxBeginThread, 函数WaitForSingleObject等

        步骤:1、创建基于对话框的应用程序,并在上添加相应控件,如图1:

图 1

                 2、创建后台函数,作为工作者线程的入口地址:

                       比如可以为项目添加一个新的文件, 然后定义函数:

 

UINT BKThreadProc(LPVOID Param)
{
    CWorkerThreadDlg* WorkerThreadDlg=(CWorkerThreadDlg*)Param;
    ::WaitForSingleObject(WorkerThreadDlg->m_eStart,INFINITE);
    long total=0;
    CString result;
    WorkerThreadDlg->m_ctrlProgress.SetRange(0,WorkerThreadDlg->m_nMax);
    for (int i=0;i<=WorkerThreadDlg->m_nMax;i++)
    {
        WorkerThreadDlg->m_ctrlProgress.SetPos(i);
        Sleep(20);
        total+=i;
    }
    result.Format("%d",total);
    AfxMessageBox("结果为="+result);

    return 0;
}

                 3、在对话框类(即CWorkerThreadDlg类)中如下操作: 

添加成员变量(public):

CEvent m_eStart;        

CProgressCtrl m_ctrlProgress;

定义函数:即按钮“开始运算”的事件函数

void CWorkerThreadDlg::OnBnClickedButton1()
{
    UpdateData(1);
    AfxBeginThread(BKThreadProc,this);
    m_eStart.SetEvent();  //同步通讯

}

定义函数:按钮“使用说明”事件

void CWorkerThreadDlg::OnBnClickedButton3()
{
    AfxMessageBox("这个程序是利用工作者线程实现的。/n输入一个数字后程序便在后台运行,这/n里故意作了延时处理,同时显示进度,所/n以您可以在下面的输入框中动作。");
}

 

                 4、以上便是主要步骤,基本上就这些,关键是函数AfxBeginThread、WaitForSingleObject以事件同步类CEvent的使用。

                 运行效果如下:(在后台线程工作的同时可以操作主线程界面,如弹出说明等)

                  

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值