主题:ESM6800在QT程序里使用串口接收数据时GUI线程会卡住

  共有7576人关注过本帖    
美女呀,离线,留言给我吧!
宫梓萱
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之前,界面显示的线程就无法执行,导致表现起来就很卡。


  单帖管理 | 引用 | 回复 回到顶部

返回首页

ESM6800在QT程序里使用串口接收数据时GUI线程会卡住

用户名:
            验证码: 验证码,看不清楚?请点击刷新验证码
内容: