admin管理员组

文章数量:1641444

编写Qt中串口读写的程序,想当然的用了多线程,实际运行起来发现有警告信息:

QSocketNotifier: Socket notifiers cannot be enabled or disabled from another thread

然后经过若干次串口读写之后,程序就报错退出了。

尝试了多种修改方式,还是如此。

后来网上查询,突然发现原来串口读写也可以和界面控件事件一样使用signal和slot的,于是暂时放弃多线程,改用signal和slot, 代码大致如下:

//绑定signal:QSerialPort::readyRead, G::sp1是一个QSerialPort对象
qApp->connect(G::sp1, &QSerialPort::readyRead, qApp, SPHandler::dataReceived);

//slot
void SPHandler::dataReceived(){
    QByteArray data = G::sp1->readAll();
    QString resp =  QString::fromUtf8(data);
    qDebug() << "返回:" << resp;
    //...
}

修改成功,串口读写过程再也没有奇怪的log提示了:

 

C#/WinForm中也有类似的串口事件绑定。

本文标签: 报错程序SocketQTdisabled