主题: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之前,界面显示的线程就无法执行,导致表现起来就很卡。 |
单帖管理 | 引用 | 回复 |