LINUX.ORG.RU

следующее время.


0

0

Спрашиваю как лучше дождатся наступление следующей секунды? Конечно можно тупо в цикле проверять time(NULL), но хотелось бы не загружать систему, а усыпить процесс до следущего момента.

PS язык Це.

anonymous

man gettimeofday man nanosleep

anonymous
()

Вы сами дали вопрос на свой ответ: усыпите процесс и усе тут. Способов усыпления несколько - sleep, нанослип.

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

удачи.

NewComer
()

Ну, дык понятно, что как я предложил можно.
Мне надо 1 раз в секунду (или в другой период) совершать определённые дествия. соотвественно между ними надо спать. Но я не знаю сколько спать, спать надо до определенного момента или каждый раз проверять, а не наступил ли он.

тоесть заменить следующий текст более здоровым кодом:

for(t=time(NULL);;t=time(NULL)){
work();
for(;t==time(NULL);)
nanosleep(...);
}

Если можно поподробнее про SIGALRM: в каком мане копать.

anonymous
()

Спасибо за ссылку

anonymous
()

Прикол, по приведённой ссылке параметры old и new фукции setitimer поменяны местами, чем в мане.

Где правильно?

anonymous
()

> Но я не знаю сколько спать, спать надо до определенного
> момента или каждый раз проверять, а не наступил ли он.

что за момент - что должно произойти?

lg ★★
()

Следующий момент времени.
Было 5 секунд, что либо сделал и уснул пока не будет 6 секунд.
И так далее по циклу, типа cron (вот думаю на его исходники посмотреть).

anonymous
()

А если так: -взять время (gettimeofday) -вычислить сколько времени до следующей секунды -заснуть на это время (sleep, nanosleep) -телемаркет...

anonymous
()

А если так? запустить таймер с частотой 1 сек. (какой хочеш REAL,VIRTUAL,PROF) принимаеш сигнал от таймера, а на обработчике висит твоя задача.

C-Stalker
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.