2016-05-16 121 views
2

我有使用QSerialPort的应用程序,我的程序执行的最后一件事就是打电话给我closePort功能,看起来像这样:确保QSerialPort.close在程序执行完成之前完成?

//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

让你closePort功能的插槽,并将其连接到QCoreApplication::aboutToQuit

connect(qApp, &QCoreApplication::aboutToQuit, someCommSessionPointer, &SerialCommSession::closePort) 

当与应用程序退出之前,你的插槽将被调用的事件循环退出。确保您已包含<QCoreApplication>或其派生类之一,以使qApp宏能够正常工作。

另外:

多久应该QSerialPort.close()取来执行?我怎样才能确保它完成?

在同一个线程中的插槽被同步调用,所以在控制返回到应用程序之前,只要需要它就可以。应用程序不会退出,直到您的插槽返回。

相关问题