当我从线程创建QSerialPort时,Signal readyRead没有发出

时间:2015-12-21 11:00:20

标签: c++ multithreading qt serial-port

我有一个类COMPort用于与QSerialPort交互。当我从主线程创建示例这个类时,我可以发送和接收数据并发出readyRead信号。但是当我尝试从线程中进行相同的操作时,将不会发出信号readyRead。

void GetSN_Thread::run()
{
    // Connect to serial port with default baudrate
    serialPort = new COMPort();

    if (!(serialPort->connectCOM(portName, DEFAULT_BAUDRATE)))
    {
        //Send signal -> Unable connect to this com port
        emit showMsg("Unable to connect to " + portName + "\n");
        return;
    }

    emit showMsg(portName + " connected" + "\n");

    serialPort->write("Hello");

在此之后我等待一个信号readyRead,但是没有发出。

当我从主线程中创建它时,一切正常。

serialPort = new COMPort();
QString btlMsg= "";
if (serialPort->connectCOM(comName, comBR))
{
    serialPort->write(COMMAND_START);
    rcvThr = new ReceiveThread(serialPort, 4);
    connect(rcvThr,SIGNAL(sendString(QString)), this, SLOT(msgHandler(QString)));
    rcvThr->start();
}

COMPort的代码:

bool COMPort::connectCOM(QString name, int baudrate)
{
    this->portName = name;
    this->baudrate = baudrate;
    connect(&serialPort, SIGNAL(readyRead()), this, SLOT(readDataCOM()));
    serialPort.setPortName(this->portName);
    serialPort.setDataBits(QSerialPort::Data8);
    serialPort.setParity(serialPort.NoParity);
    serialPort.setBaudRate((QSerialPort::BaudRate)this->baudrate);
    serialPort.setStopBits(serialPort.OneStop);

    serialPort.open(QIODevice::ReadWrite);

    if (serialPort.isOpen())
        return true;
    else
        return false;

}

读取数据的方法:

void COMPort::readDataCOM()
{
    char chData;
    while (serialPort.read(&chData,1))
    {
       queueMsg.append(chData);
    }
}

1 个答案:

答案 0 :(得分:-2)

一切都好......但是信号放在哪里?我没有看到代码中的任何地方发出readyRead();无处连接showMsg();信号。