Каков наилучший способ отложить запуск потока до определенного времени? - PullRequest
1 голос
/ 05 января 2010

Я создаю приложение, которое должно вызывать определенный API в определенное время. Я хотел бы установить время выполнения для каждого из вызовов, и чтобы моя функция execute была вызвана автоматически, когда каждый вызов должен быть выполнен. Какой лучший способ сделать это?

Я думал о создании нового таймера для каждого нового вызова, который должен быть выполнен, с единственным интервалом таймера, установленным на время его выполнения. Это хороший способ достижения того, что мне нужно, или есть что-то более эффективное?

Ответы [ 2 ]

2 голосов
/ 05 января 2010

Это разумный подход для небольшого количества таймеров / потоков. Для большого числа вы должны использовать один таймер, установленный на наибольший общий знаменатель интервалов, и позволить ему выбрать соответствующую задачу (если есть) для запуска.

Использование запланированной задачи Windows почти наверняка излишне.

0 голосов
/ 05 января 2010

Мне нравится использовать один поток (или поток пула) с ResetEvent (вручную или автоматически) с тайм-аутом, установленным на некоторую долю самой быстрой задачи (скажем, раз в 5 секунд). Внешне вы можете вызвать событие, чтобы обработать ожидающие отправки, или каждый раз, когда истекает время ожидания, вы также можете проверить наличие ожидающих отправок.

Если вы установите тайм-аут на долю (скажем, 30%) наименьшего интервала, то вы сможете сохранять приличный контроль над тем, сколько времени занимает процесс «проверки», но если вы пропустите интервал, у вас будет разумный период времени в котором для отправки задачи. Это также дает вам окно разумного запуска.

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

...