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();//临界区退保护 }
相关文章推荐
- 小字典之MFC简单的多线程调用类的成员函数实现逐步画线功能 VS2015 C++ 完成
- CWnd::AssertValid()函数执行出错---MFC多线程
- 一种通过async/await实现函数同步执行的方式
- MFC界面包装类 ——多线程时成员函数调用
- MFC类成员函数作为线程函数的解决办法
- 一种实现Win32消息处理处理函数的新方法 - 基于Thunk实现的类成员消息处理函数
- MFC界面包装类(多线程时成员函数调用的断言失败)
- MFC界面包装类(多线程时成员函数调用的断言失败)
- mfc界面包装类 ——多线程时成员函数调用的断言失败
- 函数体中打印日志信息自动附加函数名字的一种实现办法
- MFC界面包装类(多线程时成员函数调用的断言失败)
- 摘录:MFC界面包装类(多线程时成员函数调用的断言失败)
- <a> 里面herf执行JS函数的处理办法,网上找的一个比较靠谱的
- 一种实现Win32消息处理处理函数的新方法 - 基于Thunk实现的类成员消息处理函数
- 类成员函数作为多线程的入口函数的实现方法
- 巧妙解决问题:&CMFCcodeDlg::RunCommands”创建指向成员的指针。MFC多线程调用要求调用的接口必须是全局函数或静态成员函数
- 类成员函数作为多线程的入口函数的实现方法
- MFC类成员函数作为线程函数的解决办法
- 类成员函数作为多线程的入口函数的实现方法
- 一种实现Win32消息处理处理函数的新方法 - 基于Thunk实现的类成员消息处理函数 .