求问下线程间干扰问题

无欢Godric 2016-10-18 04:43:12
线程本来是用来解决耗时操作问题,但是在使用过程中发现会出现被干扰,不稳定的情况。

具体是这样子的,程序需要不停发送数据,测试稳定性的时候就加了个while(1)循环,让此线程一直运行,循环一次3个状态,不同状态来控制数据的发送,一次发送500个字节左右,1s循环5-8次(状态由外部设备来信号控制),此部分代码框架如下



while(1)
{
while(s_count < weft)
{
//循环一次3个状态,每个状态维持时间较短,根据不同状态来控制数据的发送,一次发送500个字节左右,1s循环5-8次
}
}


但是测试时发现偶尔会出现不正常情况(某个状态被跳过,导致此次数据没有发送),出错时间毫无规律,有时半小时都没问题,有时1分钟出现2次,而且之前把这段代码单独放到一个函数里调用运行时,测试过3个小时,一次都没错过,所以循环里逻辑应该是没问题,但是这样子主线程基本卡死做不了其他事情了,之后放到线程里就出现这种问题了,所以初步怀疑是线程间出现问题了,可能是执行循环过程中cpu做其他事情去了,导致某个状态被跳过(实际上出现问题后我把其他线程都关了,所以主程序也基本没什么操作)?由于对线程不是很精通,所以特来求问,请问有可能出现这种情况么,还是其他什么原因,怎么解决?
...全文
313 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
无欢Godric 2016-10-18
  • 打赏
  • 举报
回复
引用 1 楼 what951006 的回复:
这两个变量 s_count , weft 可能被改变了!!你试试这个 QMutex mutex; mutex.lock(); while(s_count < weft) { //循环一次3个状态,每个状态维持时间较短,根据不同状态来控制数据的发送,一次发送500个字节左右,1s循环5-8次 } mutex.unlock();
所以可能是线程间互斥的原因,我试试把,虽然主程序和其他函数完全没对里面变量进行操作,不过以后也要用到
  • 打赏
  • 举报
回复
这两个变量 s_count , weft 可能被改变了!!你试试这个 QMutex mutex; mutex.lock(); while(s_count < weft) { //循环一次3个状态,每个状态维持时间较短,根据不同状态来控制数据的发送,一次发送500个字节左右,1s循环5-8次 } mutex.unlock();

16,211

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧