подожди немного - PullRequest
       6

подожди немного

1 голос
/ 16 января 2011

У меня есть требование запустить приложение в определенное время. Я не хочу, чтобы меня устраивали на работу. Мой исполняемый файл - приложение, и я хотел бы начать его с 20 января 2011 года. Так что я должен запустить его как ./app –date 2011-Jan-20

Здесь проблема заключается в том, как я буду вычислять разницу во времени от текущей и даты, указанных в параметре командной строки.

Я не хочу писать выигрышную функцию. Есть ли в сборке функции, доступные для такого типа разницы во времени. (c и Linux)

Ответы [ 2 ]

4 голосов
/ 16 января 2011

Я знаю, что вы ожидаете ответа C, но это может вас заинтересовать:

Поскольку вы работаете в Linux, система уже обеспечивает эффективный способ планирования задач: at

В вашем случае пользователь, который хотел бы выполнить свою задачу 20 января 2011 года в 8 часов утра, просто набрал бы:

echo "./app" | at 08:00 20.01.2011

Задача будет выполняться с использованием учетных данных пользователя. Обратите внимание, что at также принимает относительные временные директивы, такие как at now +1 day. Это мощный инструмент, который поставляется с большинством дистрибутивов Linux по умолчанию.

Список запланированных заданий можно получить с помощью:

atq

И вы даже можете удалить запланированные задания, используя:

atrm

Надеюсь, это поможет.

1 голос
/ 16 января 2011

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

Чтобы вычислить разницуОдин из способов - сначала преобразовать строку даты в struct tm, используя strptime(), а затем передать ее в mktime(), что даст вам количество секунд, начиная с эпохи unix 1970-01-01 00:00:00.Затем получите текущее время, используя gettimeofday() или clock_gettime(), они также сообщают о времени, прошедшем с эпохи Unix.Преобразуйте время начала и текущее время в секунды и вычтите значения.

...