Вероятно, вопрос заголовка не очень явный. Я использую Qt5 для Windows7.
В потоке (QThread) в какой-то момент, в функции/методе "process()"
, я должен дождаться символа "encrypted()"
SIGNAL, принадлежащего QSslSocket, который я использую в этом потоке. Также предположим, что я должен использовать QTimer и ждать "timeout()"
SIGNAL, чтобы избежать блокировки в бесконечном цикле...
Теперь у меня есть:
// start processing data
void Worker::process()
{
status = 0;
connect(sslSocket, SIGNAL(encrypted()), this, SLOT(encryptionStarted()));
QTimer timer;
connect(&timer, SIGNAL(timeout()), this, SLOT(timerTimeout()));
timer.start(10000);
while(status == 0)
{
QThread::msleep(5);
}
qDebug("Ok, exited loop!");
// other_things here
// .................
// end other_things
emit finished();
}
// slot (for timer)
void Worker::timerTimeout()
{
status = 1;
}
// slot (for SSL socket encryption ready)
void Worker::encryptionStarted()
{
status = 2;
}
Ну, очевидно, это не сработает. Он остается в этом while-loop forever...
Итак, вопрос: есть ли способ решить эту проблему? Как я могу ждать этого "encrypted()"
SIGNAL, но не более - пусть говорят 10 секунд - чтобы избежать застревания в этом цикле ожидания/потока?