2013-11-20 49 views
1

我试图从单独的线程读取/写入数据。打开串口时不显示错误,但我无法读取或写入任何内容。在单独的线程上使用QSerialPort

这是我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对象吗?

回答

1

read()实际上并没有做任何的阅读和需要一个事件队列在紧要关头才能正常

你可以叫_serial->waitForReadyRead()每当_serial->bytesAvailable()是0