Необходимо до выхода из приложения завершить в объекте, который создается в дочернем потоке, некоторые операции (запись состояния в файл).
при созданнии объекта в дочернем потоке, сединяю aboutToQuit() со своим слотом:
NetworkConnection::NetworkConnection(QObject *parent) :
QObject(parent)
{
connection = new QSslSocket(this);
connect(connection, SIGNAL(stateChanged(QAbstractSocket::SocketState)),
this, SLOT(on_socketStateChanged(QAbstractSocket::SocketState)));
connect(qApp, SIGNAL(aboutToQuit()), this, SLOT(on_applicationQuit()));
}
void NetworkConnection::on_applicationQuit()
{
connection->disconnectFromHost();
}
void NetworkConnection::on_socketStateChanged(QAbstractSocket::SocketState state)
{
if (state == QAbstractSocket::UnconnectedState)
{
if (fileSize > 0)
{
ApplicationSettings settings;
if (totalRecived != fileSize && totalRecived > 0)
{
settings.setValue("LasFileName", outputFile->fileName());
settings.setValue("DisconnectPosition", totalRecived + 1);
settings.setValue("HashFile", md5File);
}
else
{
settings.setValue("LasFileName", QVariant());
settings.setValue("DisconnectPosition", QVariant());
settings.setValue("HashFile", QVariant());
}
emit complete((totalRecived == fileSize), totalRecived);
}
resetData();
}
}
Проблема в том, что, слот NetworkConnection::on_applicationQuit() отрабатывает нормально, затем при разрыве соединения вызывается слот NetworkConnection::on_socketStateChanged, и вроде как начинает работать, но после первой строчки записи в файл приложение завершается. Т.е. поток принудительно убивается слотом приложения quit() и не до конца завершается.
Как корректно убить поток, что бы завершились все предварительные действия?
PS: в самом классе потока есть обработчик сигнала complete(bool, qint64), но до вызова этого сигнала так и не доходит.