• 7211阅读
  • 7回复

[提问]线程间通讯的信号和槽 [复制链接]

上一主题 下一主题
离线hxhua05
 
只看楼主 倒序阅读 楼主  发表于: 2011-06-19
一个主线程 MainWindow 的UI类,一个子线程QThread类:
QThread 向 MainWindow 发送信号
QThread::run{
         ......
         ......
         udp_process();
         ......
         ......

如果 emit 在 QThread::run 里实现那么 MainWindow 就能正常接收。
如果 emit 在 udp_process() 里实现  MainWindow 就不能接收,因为只能在 NEW 一个 QThread 才能 emit ,而我的代码只能在udp_process() 里实现 emit
现在有没有办法解决这个问题

离线diyuanbo

只看该作者 1楼 发表于: 2011-06-19
问题可能出在被隐藏的代码
离线jdwx

只看该作者 2楼 发表于: 2011-06-19
如果  udp_process();是QThread里的一个函数,应该没区别,关键是确实执行emit了。
简化一下  udp_process();里面就一行emit XXXX;试试?
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线hxhua05
只看该作者 3楼 发表于: 2011-06-19
回 2楼(jdwx) 的帖子
udp_process(); 不是QThread里的函数,是另外一个文件.cpp 里的
离线hxhua05
只看该作者 4楼 发表于: 2011-06-19
如果能在QThread的构造函数里建立信号和槽的连接也能解决问题,connect(this,SIGNAL(....),MainWindow,SLOT(....));
但是这个MainWindow不知道怎么填写,QThread里面没有这个实例啊
离线jdwx

只看该作者 5楼 发表于: 2011-06-20
回 4楼(hxhua05) 的帖子
线程间通信最好的方法是发送消息。
如果这样能解决问题
1:那就在QThread里加一个MainWindow指针变量,把MainWindow传进去。
2:New QThread(this);如果在mainwindow里new就可以用this传进去.QThread::parent();就是mainwindow。此方没试过不保正能好用,因为QThread::parent()是const。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线hxhua05
只看该作者 6楼 发表于: 2011-06-21
回 5楼(jdwx) 的帖子
这个也不行。

不过现在我解决了,就是用一个公共变量把QThread的实例指针保存起来,现在随便在哪里都可以 emit 了,也能正确收到
离线eagle
只看该作者 7楼 发表于: 2011-07-01
能不能上传下代码,本人想建立一个class类,让主线程和子线程都能访问,不知怎么写。
快速回复
限100 字节
 
上一个 下一个