2010-01-05 2 views
1

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

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

ответ

2

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

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

+0

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

0

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

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

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

+0

... или минутный раз :-) Кучи не приходят так много; Я думаю, что я даже использовал Тернарные деревья больше. –

+0

Ха-ха! Хорошая точка зрения. Есть определенно альтернативы списку заказов. – GrayWizardx

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