Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading QSerialport在QThread中被阻止_Multithreading_Qt_Serial Port_Qthread - Fatal编程技术网

Multithreading QSerialport在QThread中被阻止

Multithreading QSerialport在QThread中被阻止,multithreading,qt,serial-port,qthread,Multithreading,Qt,Serial Port,Qthread,我试图从线程读取串行输出。串行端口在主程序中打开,并将QSerialPort变量传递给线程。使用信号和插槽机制调用线程,如下代码所示 connect(m_serial, &QSerialPort::readyRead, this, &MySerialPort::startReadingThread); 然后我在线程中调用了serial.readAll()函数,并将接收到的数据打印到日志中。但一段时间后,串行端口被阻塞,无法打印任何数据 QByteArray message =

我试图从线程读取串行输出。串行端口在主程序中打开,并将QSerialPort变量传递给线程。使用信号和插槽机制调用线程,如下代码所示

connect(m_serial, &QSerialPort::readyRead, this, &MySerialPort::startReadingThread);
然后我在线程中调用了serial.readAll()函数,并将接收到的数据打印到日志中。但一段时间后,串行端口被阻塞,无法打印任何数据

 QByteArray message = MySerialPort::m_serial->readAll();
 qDebug() << message;
QByteArray message=MySerialPort::m_serial->readAll();

qDebug()单线程工作吗?另外,您为什么还需要线程?您是否使用
m\u serial->moveToThread(new\u thread)
更改了
m\u serial
的线程关联性?如果没有,那么您可能在不同线程上的代码之间执行直接连接,从而导致未定义的行为。没有一句话就说不出更多的话来。然而,正如@hyde所指出的,实际上不需要为此使用单独的线程。我正在从serialport读取mavlink消息,并在QML UI上更新它们的值。它全部在单线程中运行。mavlink消息的提交速度如此之快,因此UI中的值不会更新得如此之快。这就是为什么我使用单独的线程,即在一个线程中读取串行端口,在另一个线程中更新UI。LOL,有多少人会知道“mavlink”是什么?好吧,我正好是他们中的一员……)是的,这可能是一个数据洪流,仅仅是一个
qDebug()
,就可以很容易地使应用程序停止运行(尤其是GUI应用程序)。但正如其他人所说,您需要提供更多的MRE。。。最终,如果需要,您需要学习如何正确地缓冲所有这些数据。如果您只是将数据直接传送到文件,那么可能会更容易。但是如果你正在解析中间的数据。。。。您可能需要一个缓冲区。如果有的话,你也没有说明应用程序当时在做什么。另外,从你给出的一个很少的例子来看,你似乎正在从主线程读取数据,因此它实际上不是多线程的。