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