• 7259阅读
  • 7回复

slot中有死循环,导致事件触发后界面卡死,怎么办? [复制链接]

上一主题 下一主题
离线xiaomi123
 
只看楼主 正序阅读 楼主  发表于: 2009-11-21
我需要在点击某个按钮后的事件中,用死循环的方式来每隔n秒发送一个数据包。但是不论是采用while(1){dosth();  sleep(20);};

还是采用QTimer,结果都是点击后界面就不能响应任何事件了,也就是死掉了。请问这个问题怎么解决。

谢谢!
离线dbzhang800

只看该作者 7楼 发表于: 2009-11-21
引用第6楼xiaomi123于2009-11-21 18:41发表的  :
QTest是测试的时候用的吧。而且,如果直接#include<QTest>,会提示找不到文件的。估计是需要配置吧。比较麻烦。


如果用 这个的话,要启用 QtTest 模块。

不过说回来,你还是先搞清楚你的 QTimer 为什么不工作吧,另外贴些代码可能有帮助
离线xiaomi123
只看该作者 6楼 发表于: 2009-11-21
引用第4楼zhgn于2009-11-21 18:14发表的  :
用QTest::qWait(int), 就可以暂停时间但不阻塞Gui。


QTest是测试的时候用的吧。而且,如果直接#include<QTest>,会提示找不到文件的。估计是需要配置吧。比较麻烦。
离线xiaomi123
只看该作者 5楼 发表于: 2009-11-21
引用第3楼dbzhang800于2009-11-21 11:53发表的  :
看楼主的问题,不用使用线程,简单的加个QTimer应该就够了,
估计楼主在QTimer事件处理中都用了sleep



QTimer中没有sleep阿。我设置了interval的。

为什么不能sleep阿?
离线zhgn

只看该作者 4楼 发表于: 2009-11-21
用QTest::qWait(int), 就可以暂停时间但不阻塞Gui。
离线dbzhang800

只看该作者 3楼 发表于: 2009-11-21
引用第2楼wato于2009-11-21 11:11发表的  :
新建一个线程 把那个工作交给非GUI线程


看楼主的问题,不用使用线程,简单的加个QTimer应该就够了,
估计楼主在QTimer事件处理中都用了sleep
离线wato
只看该作者 2楼 发表于: 2009-11-21
新建一个线程 把那个工作交给非GUI线程
离线dbzhang800

只看该作者 1楼 发表于: 2009-11-21
Gui线程中任何时候都不要使用sleep !!
快速回复
限100 字节
 
上一个 下一个