主題:ESM6800在QT程序里使用串口接收數據時GUI線程會卡住 共有19456人關注過本帖 |
---|
![]() 宮梓萱 |
1樓 信息 | 搜索 | 郵箱 |
![]() ![]() ![]() ![]() |
ESM6800在QT程序里使用串口接收數據時GUI線程會卡住 ![]() 使用linux的方式單獨開了一個串口發送接收線程。QT的動畫來提示數據接收狀態。接收少量數據時還好。在115200bps下接收20多KB數據時發生QT動畫卡住,接收完成才正常。我想我單獨開了一個線程啊,串口線程和QT的GUI線程是互不干擾的。實際測試發現,GUI線程下的定時器也不能用,只有等數據接收完成才可以。這是開了一個假線程嗎。這個串口線程是參照例程的。 |
單帖管理 | 引用 | 回復 ![]() |
![]() hzc |
2樓 信息 | 搜索 | 郵箱 |
![]() ![]() ![]() ![]() |
![]() 你好,可以檢查一下接收線程的操作,在每次接收循環之間增加一點延時。如果接收線程在接收大量數據的時候,是類似死循環一樣的操作,就會將CPU的資源占完,導致無法正常切換到其他線程的時間片,這樣就會導致其他線程表現出卡頓的現象。 |
單帖管理 | 引用 | 回復 ![]() |
![]() 宮梓萱 |
3樓 信息 | 搜索 | 郵箱 |
![]() ![]() ![]() ![]() |
![]() 你好,我貼下我測試的代碼。我使用了usleep后更卡了。我認為運行了usleep后串口接收線程就休眠了,此時QT的GUI線程能順利運行啊。但的確是更卡了。如下是串口線程代碼。 |
單帖管理 | 引用 | 回復 ![]() |
![]() hzc |
4樓 信息 | 搜索 | 郵箱 |
![]() ![]() ![]() ![]() |
![]() 你好,我看代碼中有互斥鎖,可以檢查一下是不是負責刷新界面顯示的線程中也加了鎖,所以在接收線程中互斥鎖沒有unlock之前,界面顯示的線程就無法執行,導致表現起來就很卡。 |
單帖管理 | 引用 | 回復 ![]() |