• 4499阅读
  • 3回复

[提问]关于Qt多线程的一知半解的提问 [复制链接]

上一主题 下一主题
离线roywillow
 

只看楼主 倒序阅读 楼主  发表于: 2011-07-21
最近需要在GUI程序中执行一个无限循环(当然在特定情况下会终止的),于是就考虑到了使用线程。因为是个业余爱好者加上之前也没有这方面的知识,于是在使用的过程中遇到了很多问题……
对于这段代码先做了一些小测试:
1.直接把这个死循环放到MainWindow的函数中执行(比如构造函数),结果界面卡住(窗口始终不显示
2.把循环放到QThread的run()中,MainWindow中启动这个thread,界面正常,循环执行正常,但是考虑到可能需要信号和槽,而exec()又没法启动,所以很纠结……
3.经过搜索了解到可以将代码放到QObject子类中,将这个object进行moveToThread。于是将循环放入QObject子类的函数中,MainWindow中实例化这个Object和一个QThread,Object进行moveToThread,启动thread,启动循环,结果效果跟1一样,界面卡住,不是期望的效果……

最后倾向于使用类似于3的方法,但是并没有达到期望的效果,所以……是哪个地方的问题呢……?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线jdwx

只看该作者 1楼 发表于: 2011-07-21
回 楼主(roywillow) 的帖子
信号和槽可以用到多线程里,没问题。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线roywillow

只看该作者 2楼 发表于: 2011-07-21
其实我是想知道第三种方法有没有做错,为什么好像没有出现预期的方法二的效果……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线dbzhang800

只看该作者 3楼 发表于: 2011-07-21
贴出你方法3的测试例子吧(完整的例子应该可以控制到50行以内),应该是用法有问题。

比如:你提到启动循环,如何启动的等?
快速回复
限100 字节
 
上一个 下一个