[問題] 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