2016-05-16 4 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() принять для выполнения? И как я могу обеспечить его завершение?

Слоты в одном потоке вызываются синхронно, поэтому он может занять столько времени, сколько потребуется, прежде чем управление вернется в приложение. Приложение не выйдет, пока ваш слот не вернется.

Смежные вопросы