Вопрос по c# – C #, System.Timers.Timer, запускать каждые 15 минут синхронно с системными часами

1

Error: User Rate Limit Exceeded

Вы можете позволить ему проходить каждую секунду и проверять, является ли текущее время 00, 15, 30 или 45, и только затем пересылать событие. Uwe Keim
Сначала установите значение тайм-аута таймера на миллисекунду, эквивалентное 15 мин. затем проверьте системные часы, если он даетmm (минуты), например, 00,15,30 или 45. Если TRUE, запустите таймер. Таймер автоматически запускает функцию Timer.Elapsed через каждый интервал времени. Это всего лишь идея, конечно. vanu
& APOS; ровно & APOS; вряд ли возможно из-за других системных действий ... Mitch Wheat
@MitchWheat - «невозможно» маловероятно, учитывая множество инструментов, которые у нас есть (и речь идет не о микросекундах). Henk Holterman
Обязательно установите для свойства AutoReset значение false. И каждый раз пересчитывать следующий интервал из DateTime.Now, чтобы он оставался точным. Hans Passant

Ваш Ответ

3   ответа
0

Вы можете позволить ему проходить каждую секунду и проверять, является ли текущее время 00, 15, 30 или 45, и только затем пересылать событие.

Первая идея будет:

private static System.Timers.Timer aTimer;
private static System.DateTime _last;

public static void Main()
{
    aTimer = new System.Timers.Timer(10000);

    aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

    aTimer.Interval = 1000;
    aTimer.Enabled = true;

    Console.WriteLine("Press the Enter key to exit the program.");
    Console.ReadLine();
}

private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
    DateTime time = 
        new DateTime( 1,1,1, DateTime.Now.Hours, DateTime.Now.Minute );

    if( time.Minute==0 ||time.Minute==15 || time.Minute==30 || time.Minute==45 )
    {
        // Avoid multiple notifications for the same quarter.
        if ( _last==DateTime.MinValue || _last!=time )
        {
            _last = time;

            // Do further processing.
            doProcessing();
        }
    }
}

(Пример на основеэта документация MSDN)

0

используйте Quartz.net. Затем вы можете использовать регулярные выражения для определения интервала.

0

При запуске программы или изменении времени события, которое будет запущено, загрузите время события в память (чтобы не считывать эти данные с жесткого диска каждую секунду). Затем установите таймер на срабатывание каждую 1 секунду. Таймер, установленный на срабатывание каждую 1 секунду, очень мало загружает процессор. Установите один и откройте диспетчер задач, и вы даже не заметите, что процессор работает больше, чем до запуска таймера. Затем установите флажок в событии таймера, чтобы проверить, пришло ли время инициировать событие.

Похожие вопросы