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

 我来答
风后守望
2013-05-29 · TA获得超过297个赞
知道答主
回答量:121
采纳率:0%
帮助的人:72.8万
展开全部
貌似在线程中并不能直接调用类里面的参数,即使调用了也只是类中函数的形式,并无内容。一般参数想在线程中被调用,就要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来释放开辟的内存)
zhq4
2013-05-29 · TA获得超过170个赞
知道答主
回答量:80
采纳率:100%
帮助的人:88.7万
展开全部
_beginthreadex( NULL, 0, yourfunc, param, 0, 0 );
param就可以传入你的参数了,这里的类型是空指针,所以你可以将你的数据取地址后再转换成空指针就可以传入了,严格来说是可以传入任何类型的参数的,传入后你只需要再转换到你需要的格式即可
追问
能不能再问你一个问题,在类里面定义一个线程,我怎样传入除了类指针另外的参数,而这个参数恰好需要反馈给用这个类的人,他需要里面的数据
追答
按你说的需求,不管这个参数是什么类型,因为你是放在线程里进行操作,所以加锁我就不说了,是必须的,除了这个类的指针this你可以传入以外,如果你要自定义类型都是可以的,比如你可以自定义一个struct sss把你要的数据全部封装到里面,然后建立struct的对象取地址传入即可,使用的时候,把线程的形参void* xxx转换成sss使用就行了,sss* pS = (sss*)xxx;这样你就可以使用任意类型当作参数传入了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式