Как я могу прекратить условие задержки / ожидания - PullRequest
1 голос
/ 22 февраля 2011

Я хотел бы знать, есть ли способ отменить условие ожидания / задержки.

Я использую QTest::qwait(ms) для добавления задержки отклика в моем коде.Теперь я хотел бы прекратить / прекратить эту задержку.Что-то вроде QTest::qWait(2000) запустит 2-секундную задержку, так что я должен сделать, чтобы завершить это 2-секундное время ожидания?

Примечание: QTimer не подходит для моего кода, и я использую Qtest:qwaitдля добавления задержки.

1 Ответ

1 голос
/ 22 февраля 2011

Простой ответ: вы не можете. Проблема в том, что , даже если вы используете 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);

Я понимаю, что вам нужно сделать это с помощью метода тестирования, но я не могу придумать другого пути. Надеюсь, это поможет:)

...