打印

多线程问题

[复制链接]
1657|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
txcy|  楼主 | 2012-5-9 18:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我最近在忙一个项目,我做的项目是一个局域网聊天的软件,里面有一部分用到了多线程,我打算用多线程实现一个可以 多个人同时聊天的功能,就是说打开一个对话框就是一个线程,接收到对方的消息创建一个对话框也是创建一个线程,可是我在创建的新线程中new 一个聊天的dialog对象(对话框里面存了一些udpsocket对象以及IP地址还有Hostname等,有信号和槽机制来接收消息以及发送消息),然后在thread::run方法内直接执行对话框的exec()函数,可是每当我的程序收到对方发过来的信息的时候,我的程序就会崩溃,出错的信息是这样的: ASSERT failure in QWidget: "Widgets must be created in the GUI thread.", file kernel\qwidget.cpp, line 1264, 多线程的程序我第一次编,Qt使用也不是 很熟练,我网上查了好多,也没理清思路,望各位大神指点一下,或者告诉我一个替代这种方法的更好的思路

相关帖子

沙发
hsbjb| | 2012-5-9 18:46 | 只看该作者
错误说的很清楚,Widgets只能在界面线程中创建,而不是后台线程
可以为每一个窗口创建一个后台线程来收发数据,而不是在线程中创建对话框

使用特权

评论回复
板凳
无冕之王| | 2012-5-9 18:56 | 只看该作者
对多线程里涉及到公用资源,要做保护,一个时间内,只能一个线程控制一个资源,这个是必须的,可以用线程互斥,或事件对象,或资源加锁,试试

使用特权

评论回复
地板
pkat| | 2012-5-9 20:31 | 只看该作者
用线程互斥试试

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

274

主题

2106

帖子

0

粉丝