我正在尝试从单独的线程读取/写入数据。打开串口时没有显示错误,但我无法读取或写入任何内容。
这是我的 SerialThread.h 代码:
#include <QThread>
class SerialThread : public QThread
{
Q_OBJECT
public:
explicit SerialThread(QObject *parent = 0);
~SerialThread();
protected:
void run();
private:
bool _threadRunning;
};
我的 SerialThread :: run()实现:
void SerialThread::run()
{
QSerialPort *_serial = NULL;
foreach(QSerialPortInfo info, QSerialPortInfo::availablePorts())
{
QString name = info.portName();
if(name.startsWith("usbserial-"))
{
_serial = new QSerialPort(info, this);
qDebug() << "Opening " << name;
if(_serial->open(QSerialPort::ReadWrite))
{
qDebug() << "ok";
_threadRunning = true;
}
}
}
while(_threadRunning)
{
QByteArray array = _serial->read(10);
for (int i = 0; i< array.length(); i++)
qDebug() << QString::number(array[i], 16);
msleep(1000);
}
if(_serial)
{
_serial->close();
delete _serial;
}
}
相同的代码无线程工作(连接 readyReady()信号)。
有什么想法吗?我可以滥用QThread对象吗?
答案 0 :(得分:1)
read()
实际上没有进行任何阅读,需要一个事件队列才能正常运行
在紧要关头,只要_serial->waitForReadyRead()
为0
_serial->bytesAvailable()