巧妙解决问题:&CMFCcodeDlg::RunCommands”创建指向成员的指针。MFC多线程调用要求调用的接口必须是全局函数或静态成员函数
2014-04-14 15:58
921 查看
在使用多线程的时候总是报错:“函数调用缺少参数列表;请使用“&CMFCcodeDlg::RunCommands”创建指向成员的指针”,才知道面向对象编程要求线程是调用的接口必须是全局函数或静态成员函数。但是已经写好的很多代码修改起来又很麻烦,如何解决呢?
在主类中定义一个指针,在构造函数里初始化此指针为this,然后用指针来调用已有的方法:
1. 定义指针,必须是静态的 ------ 重点
2. 初始化指针
3. 在线程可以调用的函数里调用指针:
4. 早就有的函数:
5. 创建多线程
解决。。。。
在主类中定义一个指针,在构造函数里初始化此指针为this,然后用指针来调用已有的方法:
1. 定义指针,必须是静态的 ------ 重点
static CMFCcodeDlg *p_cmfcode = NULL;
2. 初始化指针
CMFCcodeDlg::CMFCcodeDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CMFCcodeDlg::IDD, pParent) { p_cmfcode = this; }
3. 在线程可以调用的函数里调用指针:
DWORD WINAPI CallBatThreadFunc(HANDLE Thread){ if (p_cmfcode) { p_cmfcode->RunCommands(); } return 0; }
4. 早就有的函数:
void CMFCcodeDlg::RunCommands() { ......成员变量调用,赋值。 }
5. 创建多线程
void CMFCcodeDlg::StartNewThreadRunCommands(void) { m_bRun = FALSE; HANDLE hThread; DWORD dwThreadId; hThread=::CreateThread(NULL,0,CallBatThreadFunc,NULL,0,&dwThreadId); }
解决。。。。
相关文章推荐
- 函数调用缺少参数列表;请使用“&Student::Printf”创建指向成员的指针 问题解析
- 函数调用缺少参数列表;请使用“&****Dlg::getThread”创建指向成员的指针”--多线程函数调用
- error: 函数调用缺少参数列表;请使用“&BinTree<char>::_PrintNode”创建指向成员的指针
- “Caculate::writehtml”: 函数调用缺少参数列表;请使用“&Caculate::writehtml”创建指向成员的指针
- error C3867: “Point::getX”: 函数调用缺少参数列表;请使用“&Point::getX”创建指向成员的指针
- Qt使用回调函数报错“函数调用缺少参数列表,请使用&xxx创建指向成员的指针”解决办法
- error C3867: “A::fun1”: 函数调用缺少参数列表;请使用“&A::fun1”创建指向成员的指针
- “error C3867: “XXX”: 函数调用缺少参数列表;请使用“&XXX”创建指向成员的指针”的错误
- static函数 函数调用缺少参数列表;请使用“&XXX”创建指向成员的指针;类的static成员函数
- “error C3867: “XXX”: 函数调用缺少参数列表;请使用“&XXX”创建指向成员的指针”的错误
- Java笔记3 多线程<1>线程概述、多线程的创建、多线程的安全问题、静态同步函数的锁、死锁
- 【转】C++编程中用指针直接调用类成员函数问题及其解决方法
- c++类内接口调用其它函数传递成员指针问题(以二叉树举例)
- KNI接口 "KNI_GetFieldID" 调用失败问题的解决
- 多线程委托之跨线程问题分析--在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke(解决方法已更新)
- 用多线程方法实现在MFC/WIN32中调用OpenGL函数并创建OpenGL窗口
- 类成员函数中调用socket接口close()问题
- MFC界面包装类(多线程时成员函数调用的断言失败)
- QT信号槽的六个优点(虽然直接调用函数也可解决问题,但要在具体的函数中传递指针,多对一和解除关系也够麻烦的)
- C++ 指向成员函数指针问题