2016-05-16 126 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()取來執行?我怎樣才能確保它完成?

在同一個線程中的插槽被同步調用,所以在控制返回到應用程序之前,只要需要它就可以。應用程序不會退出,直到您的插槽返回。

相關問題