在C++类里面创建线程,如何传别的参数进去

如题所述

貌似在线程中并不能直接调用类里面的参数,即使调用了也只是类中函数的形式,并无内容。一般参数想在线程中被调用,就要new一个公用的内存空间供线程调用。以工作线程为例:
线程函数首先在类中声明
_beginthreadex( NULL, 0, yourfunc, this, 0, 0 );
(this指向类本身,比如是C**Dlg类)

线程函数UINT C**Dlg::yourfunc(void * pParam)中,pParam就为C**Dlg指针
通过强制转换提取:C**Dlg *p = (C**Dlg*)pParam;中的p就得到对应指针
之后通过p->就可以直接调用C**Dlg类中所使用的所有参数和函数(当然需要使用的参数必须在类中new过并赋值之后才能使用,参数使用完毕之后别忘了delete来释放开辟的内存)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-29
_beginthreadex( NULL, 0, yourfunc, param, 0, 0 );
param就可以传入你的参数了,这里的类型是空指针,所以你可以将你的数据取地址后再转换成空指针就可以传入了,严格来说是可以传入任何类型的参数的,传入后你只需要再转换到你需要的格式即可追问

能不能再问你一个问题,在类里面定义一个线程,我怎样传入除了类指针另外的参数,而这个参数恰好需要反馈给用这个类的人,他需要里面的数据

追答

按你说的需求,不管这个参数是什么类型,因为你是放在线程里进行操作,所以加锁我就不说了,是必须的,除了这个类的指针this你可以传入以外,如果你要自定义类型都是可以的,比如你可以自定义一个struct sss把你要的数据全部封装到里面,然后建立struct的对象取地址传入即可,使用的时候,把线程的形参void* xxx转换成sss使用就行了,sss* pS = (sss*)xxx;这样你就可以使用任意类型当作参数传入了

本回答被提问者采纳
相似回答