如何实现类的成员函数创建线程
来源:互联网 发布:java类的声明 编辑:程序博客网 时间:2024/04/28 18:19
class CMySocket{ public: DWORD WINAPI WorkThread(LPVOID CompletetionPortID); ...};
有如上类,在类中某函数想以函数(WorkThread)
CreateThread(NULL, 0, WorkThread, ¶m, 0, &ThreadID))
编译会报错:cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__stdcall *)(void *)' None of the functions with this name in scope match the target type
解决方法:
1.
这种情况,一般是将线程函数申明为静态,如:
class CRealtimeTask{ public: static UINT taskmain(LPVOID param); BOOL StartTask();};
在类中定义的成员函数,VC在编译时会强加一个this指针,所以才会出现上边的情况.将该成员函数声明为static类型,可以将this指针除去,但static成员函数只能访问static成员.
2.
以将线程函数申明成友员函数,这样可以传入该类的指针,访问类的成员;
class CRealtimeTask{ public: friend UINT taskmain(LPVOID param); BOOL StartTask();};UINT taskmain(LPVOID param){ CRealtimeTask * pTaskMain = (CRealtimeTask *) param; //通过pTaskMain指针引用. return TRUE;}BOOL CRealtimeTask::StartTask(){ AfxBeginThread(taskmain,this);}
3.
可以对成员函数实现回调,并访问非静态成员的,如下所示,这是为了实现线程函数访问类成员而实现的类.比MFC的实现方法好象要好一点.
class base;typedef int (base::*fnCallBack)(void *p);struct callback(void *param;fnCallBack *pfuc;base *pThis;};class base{ static int myThreadfuc(void *p){ struct callback *p1=(struct callback *)p; base *pthis=p1->base;fnCallBack *pfuc=p1->pfuc;void *param=p1->param; int i=(pthis->*pfuc)(param);delete p; return i; } public: void myCreateThread(fnCallBack pfuc,void *param){ struct callback *p=new struct callback; p.param=param;p.pThis=this;p.pfuc=pfuc; ::CreateThread(myThreadfuc,p); } virtual int myCallBack(void *p){printf("It's base class./n");return 0;}};class derived: public base{ int myCallBack(void *p){printf("It's derived class/n");}};void myCreateThreadImitate(fnCallBack fuc,void *p){ (*fuc)(p);}void main(){ base p;char *param; p.myCreateThread(&(base::myCallBack),param); derived p2;p2.myCreateThread(&(base::myCallBack),param);}
- 如何实现类成员函数创建线程
- 如何实现类的成员函数创建线程
- 如何实现类的成员函数创建线程
- 如何实现类的成员函数创建线程
- 如何实现利用类成员函数创建线程
- 如何实现利用类成员函数创建线程
- 如何实现利用类成员函数创建线程 选择自 iceezone 的 Blog
- 类成员函数创建线程
- 类成员函数创建线程
- 多线程,成员函数内创建线程,线程函数调用类内的其他成员函数
- 多线程开发要点1:如何使用类的成员函数创建线程
- 线程创建函数与类成员函数
- 类的成员函数做线程的创建
- 创建线程调用类成员函数的方法。
- 在类中创建成员函数线程的最优解决方法
- 如何利用c++11的新特性编写类成员线程函数并实现同步
- python中如何对类的成员函数开启线程
- 线程的静态函数如何访问类的非静态成员函数或成员变量
- 懒于奋斗的躯体是徒有虚名的摆设,懒于思考的大脑是寸草不生的荒漠
- Windows Mobile 编译的内部结构和步骤
- Oracle 笔试总汇
- java的取模 取余
- java.lang.IllegalThreadStateException异常原因解析
- 如何实现类的成员函数创建线程
- O(n)时间内求无序数组中与中位数最近的k个数
- 速龙631电脑装机 硬件 参数 BIOS参数调整
- linux shell 正则表达式(BREs,EREs,PREs)差异比较
- 数据库建表-- 一对多/多对一/一对一/多对多 关系
- 博客有BUG???
- native2ascii使用
- XAMPP+joomla环境迁移问题 phpmyadmin修改mysql数据库root用户密码
- java.lang.IllegalArgumentException: Document base C:\apache-tomcat-6.0.35\webapps\dcmis does not exi