可以这样用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()比较好。
[解决办法]
如果用互斥锁的话, 肯能会丢失数据吧?
[解决办法]