Простой ответ: вы не можете. Проблема в том, что , даже если вы используете QTimer, и допустим, что тайм-аут QTimer должен остановить время ожидания, к чему бы вы подключили свой сигнал тайм-аута? Или что будет выполнять подключенный интервал ожидания или какую функцию он вызовет, чтобы остановить ожидание?
Лучше всего использовать статический метод QThread::currentThread
для получения указателя на текущий QThread , который затем можно использовать для наложения условия ожидания с помощью QThread::wait(2000)
, а затем вы можете использовать внешняя нить, чтобы остановить его на условии. Давайте рассмотрим пример, в котором вы хотите, чтобы поток ожидал 2 секунды или пока процесс не увеличится до счетчика до 9999999999. В этом случае сначала необходимо создать собственный класс, а затем использовать его в своем коде:
class StopThread : public QThread {
private:
QThread* _thread;
public:
StopThread(QThread*);
void run();
};
StopThread::StopThread(QThread* thread) {
_thread = thread;
}
void StopThread::run() {
//Do stuff here and see when a condition arises
//for a thread to be stopped
int i = 0;
while(++i != 9999999999);
_thread->quit();
}
А в твоей реализации:
QThread* thread = QThread::currentThread();
StopThread stopThread(thread);
stopThread->exec();
thread->wait(2000);
Я понимаю, что вам нужно сделать это с помощью метода тестирования, но я не могу придумать другого пути. Надеюсь, это поможет:)