• 11455阅读
  • 7回复

[提问]子线程中要如何使用串口读写数据? [复制链接]

上一主题 下一主题
离线celerylxq
 

只看楼主 倒序阅读 楼主  发表于: 2015-09-02
— 本帖被 XChinux 从 Qt代码秀 移动到本区(2016-04-23) —
希望在主线程中创建多个子线程,在各个子线程中进行串口数据收发及解析,发现在子线程中创建串口对象,总是不响应串口消息,readData()中打断点怎么都进不去,跪求大侠指点!
代码如下:
主线程中创建子线程:
QMyThread *MyThread = new QMyThread;      
MyThread->start();

子线程中创建串口对象:
void QMyThread::run()
{    
m_MyConn = new MyConnect(this,&(pRtuObj->m_strCommType),&(pRtuObj->m_sListSerialPara),&(pRtuObj->m_sListNetPara));  
m_MyConn->openCommu();  
m_MyConn->moveToThread(this);
}
打开串口:
//通信连接
void MyConnect::openCommu()
{  
if(m_Serial != NULL)  
{       delete m_Serial;       m_Serial = NULL;   }  
m_Serial = new QSerialPort;   connect(m_Serial, SIGNAL(readyRead()), this, SLOT(readData()));
m_Serial->setPortName(m_CommSettings.name);  
m_Serial->setBaudRate(m_CommSettings.baudRate);  
m_Serial->setDataBits(m_CommSettings.dataBits);    
m_Serial->setParity(m_CommSettings.parity);  
m_Serial->setStopBits(m_CommSettings.stopBits);    
if (m_Serial>open(QIODevice::ReadWrite))    
{      
SendEvent(tr("Connected to %1").arg(m_CommSettings.m_sListSerialPara.join(",")));    
   m_chCommuStatus = 1;  
}    
else  
{        
SendEvent(tr("Open Serial Error, %1").arg(m_CommSettings.m_sListSerialPara.join(",")));        
m_chCommuStatus = 0;    
}
}
串口读数据:
//串口读数据
void MyConnect::readData()
{  
QByteArray buffer = m_Serial->readAll();    
displayRxTxData(buffer);
}



离线yuyu414

只看该作者 1楼 发表于: 2015-09-15
为什么要这么做呢,就算用多线程,每次收发也只能同时只有一个线程可以,比较好的方法是要么主线程收发,然后数据传到子线程处理,要么专门一个子线程收发,其他线程处理数据
离线无心徘徊

只看该作者 2楼 发表于: 2015-10-11
一个子线程收数据, 主线程发数据。 打开串口时再创建子线程,把串口指针传递到子线程, 而不是在子线程中打开、关闭串口。 这不是子线程该干的事。
技术是知识的积累,艺术是知识的熟练!
离线yanwuyue

只看该作者 3楼 发表于: 2015-10-11
qt的串口是线程不安全的,不能在同一个串口上多个线程操作
离线无心徘徊

只看该作者 4楼 发表于: 2015-10-12
我从来不用QT提供的硬件编程接口, 基本的,我都是用windows API, 用最低层的东西; 虽然麻烦,但有性能。
技术是知识的积累,艺术是知识的熟练!
离线nigoole

只看该作者 5楼 发表于: 2015-10-19
回 无心徘徊 的帖子
无心徘徊:我从来不用QT提供的硬件编程接口, 基本的,我都是用windows API, 用最低层的东西; 虽然麻烦,但有性能。 (2015-10-12 08:25) 

有句话说得好:好好学习,天天向上。加油~~!有上船的朋友联系企鹅393320854
离线ninicaoyuan

只看该作者 6楼 发表于: 2018-04-14
请问楼主怎么解决的这个问题呢
离线dddggg

只看该作者 7楼 发表于: 2018-04-14
多个子线程访问同一个串口??
菜鸟
快速回复
限100 字节
 
上一个 下一个