[问题] qt qthread问题

楼主: checkIO (chec)   2017-05-25 15:51:12
开发平台(Platform): (Ex: Win10, Linux, ...)
win10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
vs2015
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
qt5.7
问题(Question):
void PC_info::setupTimer(){
timer = new QTimer(0);
connect(timer,SIGNAL(timeout(),this,SLOT(OnScan()),Qt::DirectConnection));
timer->start(1000);
//thread = new QThread(this);
//timer ->moveToThread(thread);
//thread->start();
}
大家好 目前在写定时扫电脑资讯的程式
OnScan是去扫HWinfo关于电脑的资讯
但是进到OnScan的时候 会让整个ui出现顿感
后来使用QThread来写的时候 顿感解决
但....会有机率性的让ui整个冻结
不知道是不是thread的用法错误了呢
作者: linotwo (._.)   2017-05-25 17:13:00
把 DirectConnection 改 BlockingQueuedConnection 试试更新 UI 的时候用 signal/slot
作者: uranusjr (←這人是超級笨蛋)   2017-05-25 17:17:00
其实用 QueuedConnection 就好了吧, 没必要 blocking?
作者: linotwo (._.)   2017-05-25 17:20:00
timeout 应该用 direct 就行,只是更新 UI 要 queue
作者: uranusjr (←這人是超級笨蛋)   2017-05-25 17:21:00
其实重点应该是 onscan 要放到 thread 里, 看上面的程式好像只有 timer 本身在背景执行, 这样应该没用把 onscan 放到自己的 class 里, 在 PC_info 初始化后moveToThread, 然后 connect 这样比较合理
作者: linotwo (._.)   2017-05-25 17:24:00
原PO说顿感有解决所以应该已经有在别的执行序只是 onscan 里面直接对 UI 操作可能会当掉
作者: libertyleave (SSLin)   2017-05-25 20:33:00
以前写QT时有听过 UI 最好都在main thread中操作
作者: f750319s (chocobo)   2017-05-25 20:54:00
开thread扫,扫完emit给main thread让UI更新

Links booklink

Contact Us: admin [ a t ] ucptt.com