在程序执行完成之前确保QSerialPort.close完成?

时间:2016-05-16 08:49:21

标签: c++ qt port

我有一个使用QSerialPort的应用程序,我的程序最后做的就是调用我的closePort函数,如下所示:

//Closes the port when we're done with it
void SerialCommSession::closePort()
{
    connected = false;
    if(m_port.isOpen())
    {
        qDebug() << "closing port";
        m_port.close();
    }
}

一些时间它工作正常,程序再次启动没有任何问题。但也许有75%的时间,当我再次尝试运行程序时,它无法打开端口,返回错误代码2. QSerialPort.close()需要多长时间才能执行?我怎样才能确保它完成?

1 个答案:

答案 0 :(得分:1)

<target name="build" description="generate files with grunt"> <exec executable="cmd" dir="./" failonerror="true"> <arg value="/C" /> <arg value="npm"/> <arg value="config"/> <arg value="set"/> <arg value="proxy"/> <arg value="http://my_Address/"/> <arg value="--global"/> </exec> <echo message="Installing Deps ..." /> <exec executable="cmd" dir="./" failonerror="true"> <arg value="/C" /> <arg value="npm"/> <arg value="install"/> </exec> <echo message="generate files..." /> <exec executable="cmd" dir="./" failonerror="true"> <arg value="/C" /> <arg value=".\node_modules\.bin\grunt" /> </exec> <echo message="Done" /> </target> 功能设为插槽并将其连接到QCoreApplication::aboutToQuit

closePort

当事件循环退出时,在应用程序退出之前,将调用您的插槽。确保您已包含connect(qApp, &QCoreApplication::aboutToQuit, someCommSessionPointer, &SerialCommSession::closePort) 或其某个派生类,以便<QCoreApplication>宏能够正常工作。

同时

  

QSerialPort.close()需要多长时间才能执行?我怎样才能确保它完成?

同一个线程中的插槽是同步调用的,因此在控制返回应用程序之前,它可能需要多长时间。在您的广告位返回之前,应用程序不会退出。