2016-05-16 14 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) 

するとイベントループが終了し、アプリケーションが終了する前に、あなたのスロットが呼び出されます。 qAppマクロが機能するには、<QCoreApplication>またはその派生クラスの1つを含めるようにしてください。

また:

どのくらいQSerialPort.closeは()を実行するために取るべきですか?そして、どうすればそれが完了することを保証できますか?

同じスレッド内のスロットは同期的に呼び出されるため、アプリケーションに制御が戻るまでに時間がかかることがあります。あなたのスロットが戻るまで、アプリケーションは終了しません。

関連する問題