2013-06-04 2 views
-2

Я хочу приостановить свою программу на несколько секунд в программе, которую я пишу C++ Qt.в самом деле, когда программа прибудет к одной из моих функций, она остановится, например, на 5 секунд, а затем продолжит следующие строки. Что мне нужно делать?как приостановить программу на несколько секунд?

, что функция является членом класса, и я хочу, чтобы о той работе (пауза) для каждого экземпляра класса ...

+0

Это в главной нити или рабочей нити? – RobbieE

+0

Не могли бы вы предоставить подробную информацию, почему вы хотите достичь этого? У меня есть чувство ... – Kcvin

+0

каждый экземпляр класса ... см. Отредактированный вопрос –

ответ

4

Если вы используете Qt5 вы можете использовать следующий трюк:

QMutex mut; 
mut.lock(); 
mut.tryLock(milliseconds); 
mut.unlock(); // I am not sure if this is a necessity 

С Qt4 вы можете использовать QWaitCondition::wait() на мьютексе;

Имейте в виду, что если это в вашей интерфейсной нити, ваш gui замерзнет, ​​пока интервал не станет эллипсом.

+0

большое вам спасибо за ваш идеальный ответ ... –

5

В случае, если вам действительно нужно сделать, у вас есть несколько вариантов
вы можете использовать QThread'ssleep методы наследованием QThread и сделать их достоянием общественности (те защищены, потому что это вообще плохая идея)

Или вы можете использовать QEventLoopexec вместе с QTimer. Подключите сигнал таймера к разъему QEventLoop quit(). Это вызовет «неблокирующее» ожидание, поэтому ваше приложение не останется замороженным.

Или, возможно, вы должны вместо этого разделить код на два метода, сделать второй оном slot и вызвать его с помощью таймера, когда соответствующий

EDIT: что-то подобное, в вашем методе съесть использовать QTimer::singleShot вызвать finishEating слот после X секунд.
Вы также можете прочитать: http://qt-project.org/doc/qt-5.0/qtcore/thread-basics.html

+0

спасибо ... был полезным –

Смежные вопросы