2011-01-23 8 views
2

Мне нужно периодически выполнять определенную задачу, и в настоящее время я использую nanosleep.C++: более точные интервалы времени

Задача должна выполняться каждую секунду или каждые 10 секунд.

Есть ли лучший способ сделать это, чем:

while(true) 
{ 
doTask(); 
sleep(); 
} 

Walter

+2

Это не имеет ничего общего с C++, это зависит от ОС. Не является ли точность «сна» достаточно хорошей? – ruslik

+0

Возможный дубликат [C++ кросс-платформенный таймер с высоким разрешением] (http://stackoverflow.com/questions/1487695/c-cross-platform-high-resolution-timer) –

+0

Мое приложение не очень стабильно - я не знаю «Посмотрите, что происходит в файле журнала, но в основном он должен сохранять файл каждые 10 секунд или около того. Я позволил ему запустить несколько часов и увидеть, что он пропустил кучу файлов, которые он должен был сохранить. Как я могу рассказать, что происходит? – Walter

ответ

1

Одним из вариантов может быть, чтобы создать поток, который будет делать задание с указанным тайм-аут.

+0

Это лучший подход, чем спать? Разве они не должны иметь такое же разрешение? – Walter

0

Вы можете использовать библиотеку потоков для создания потока, который обрабатывает doTask(). Ваша основная нить просто спит и работает каждые 1 секунду или 10 секунд.

Это можно сделать с помощью QTimer и QRunnable.

http://doc.qt.nokia.com/latest/qtimer.html

В соответствии с док-станцией, разрешение составляет около 1 мс в большинстве случаев. Для вашей потребности этого должно быть достаточно.

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