专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > QT开发

可以这样用QList吗?解决办法

发布时间:2010-05-30 21:32:30 文章来源:www.iduyao.cn 采编人员:星星草
可以这样用QList吗?
可以这样用QList吗?
功能:上位机一边在主线程中从usb接收数据,一边在分线程中从串口转发出数据

定义了全局QList变量
在主线程中,接收USB数据, m_zfList.push_back(m_data)
在转发线程中发送:
  char buf[25];
int b = 10;
if(!m_zfList.isEmpty())
{
float temp = m_zfList.takeLast();
gcvt(temp,b,buf);  
myCom_288->write(buf);
   
}
点击开始发送按钮,开始接收数据并同时转发,请问这样做可以吗? 


------解决方案--------------------
疑问:接收数据和转发数据都是无限循环吗?

建议:
使用QMutex对全局QList变量进行保护

------解决方案--------------------
楼有没有想过这种情况:
1.你接收数据就在主线程把数据插入到List最后面。在分线程取出list最后的数据进行转发。如果某些情况导致主线程与分线程“不同步了”,会不会出现永远都会有这么几个数据在List头上没法转发。就像是压在栈底。
2.参考楼上的建议。主线程边读取分线程边修改会出现问题。
个人见解……
------解决方案--------------------
楼主可以用QT里的信号量来解决, 这个与“生产者消费者”问题有些类似。 这样做可以通过按键控制线程的循环读,然后在分线程中判断信号量,再往外发。 这样在发之前,写进qlist里的东西也不会被冲洗。
信号量类是QSemaphore类。
------解决方案--------------------
个人觉得takeFirst()比较好。
------解决方案--------------------
如果用互斥锁的话, 肯能会丢失数据吧?
------解决方案--------------------
探讨
为什么呢?

引用:
如果用互斥锁的话, 肯能会丢失数据吧?
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: