可能这个标题的问题不是很明确。我正在Windows7上使用Qt5。
在一个线程(QThread)中, 在某一点,我必须等待属于QSslSocket的"encrypted()"信号,在这个线程中我正在使用它。同时我想使用QTimer并等待"timeout()"信号,以避免被阻塞在无限循环中...
现在我拥有的是:
在一个线程(QThread)中,在"process()"函数或方法的某一点,我必须等待属于QSslSocket的"encrypted()"信号,这个QSslSocket是在该线程中使用的。此外,我认为我应该使用QTimer并等待"timeout()"信号,以避免被阻塞在无限循环中... 目前我有:
// 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循环中...
所以问题是:有没有一种方法来解决这个问题?如何等待那个"encrypted()"
信号但不超过 - 比如说10秒钟 - 以避免被困在等待循环/线程中?
encrypted
信号简单地连接到一个带有参数的 lambda 中,并在 lambda 中调用事件循环的quit
方法(lambda 中应该捕获对事件循环对象的引用)。 - Nejat