看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux C+ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) QT 5 問題(Question): 各位好,小弟我日前用QSerialPort寫了一個讀&寫10次資料的程式,預期在textbox上即 時顯示這是round第幾次,但只會在第10round做完之後跳出迴圈才會顯示這是第10round( 意思是直接從0跳到10),我想是不是必須用QThread一個跑serial read-write另一個upda te mainwindow呢?還是直接在迴圈內讀寫完一次直接用connect-slot做就好? 煩請各位 給點意見,謝謝 預期的正確結果(Expected Output): 第一次做完顯示round 1->第二次做完顯示round 2->......->第10次做完顯示round 10 錯誤結果(Wrong Output): round 1 ->卡住等10次做完-> round 10 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): 手機發文 請見諒 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.24.68.35 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1452274299.A.0AB.html
Bencrie: UI 的本質就是個迴圈。讓這個迴圈卡在處理某個東西就等於 01/09 01:34
Bencrie: 讓 UI 卡住,因為他沒辦法繼續收事件、執行對應的動作。 01/09 01:34
Bencrie: 開 work thread 想法是對的,至於從 thread 送 event 給 01/09 01:37
Bencrie: UI 要查一下有沒有對應的 API 幫你處理同步問題 01/09 01:37
Bencrie: Android 的話就會是 handler 01/09 01:38
WYchuang: QSerialPort有event driven, 有資料會用signal通知 01/09 02:47
WYchuang: 除非你系統很慢 不然在Slot裡面收資料應該還可以接受 01/09 02:49
bdvstg: QCoreApplication::processEvents(); 加在迴圈內試試 01/09 05:12
bdvstg: https://goo.gl/q9ODIR 官方論壇討論串 01/09 05:13
soso7885: 謝謝樓上的各位,我試試看 01/09 11:35
fanntone: 建議用C++11 lambda然後自訂callback去作 01/10 01:42