您的位置:首页 > 其它

MFC 一种比较笨的办法实现多线程执行类成员函数

2018-01-10 16:35 253 查看

本文作为小弟初学多线程的笔记,如有纰漏大神轻喷。。

还是使用全局函数作为线程函数,就不用比较花里胡哨的办法比如联合体,友元函数等来将类成员函数作为线程函数使用了。

需求如下:

现有两个类

一个是界面的对话框类

class CXXDlg
{
///省略其它
CFun m_fun;
afx_msg void OnButtonStart();
};


一个是实现功能的类,而这个类里有一个函数fun()是需要阻塞式运行的,如下:

class CFun
{
fun();
}


需要在界面中新开线程执行这个fun(),我是怎么做的呢,其实很简单,利用了传参数的方式,直接将类成员函数的地址传给线程处理函数:

头文件中:

class CXXDlg
{
///省略其它
CFun m_fun;
CWinThread* pThread;//加入线程对象的声明
afx_msg void OnButtonStart();
};

UINT ThreadFunc(LPVOID pvParam);//加入全局线程处理函数的声明


源文件中:

CFun *pFun;//定义全局对象
CCriticalSection critical_section;//加入临界区对象进行线程同步
void CXXDlg::OnButtonStart()
{
pFun=&m_fun;//获取原来成员对象的指针
pThread = AfxBeginThread(ThreadFunc, pFun);//传入线程函数并开启线程
}

UINT ThreadFun(LPVOID pvParam)//实现全局线程处理函数
{
CFun * pFunc = (CFun *)lpParam;
critical_section.Lock();//临界区保护
pFunc->Fun();//用参数的方式调用类成员函数
critical_section.Unlock();//临界区退保护
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐