Бегать раз в день

@ Метод Алексея Фрунзе прост, но он очень медленный. Вы должны использовать 32-битный целочисленный метод @ chill выше. Другим простым методом без какого-либо умножения или деления является double dabble . Это может работать медленнее, чем алгоритм холода, но намного быстрее, чем у Алексея. После запуска у вас будет упакованный BCD десятичного числа

16
задан Robert Gould 11 November 2008 в 11:01
поделиться

5 ответов

Смотрите на quartz.net . Это - библиотека планирования для .net.

более конкретно смотрят здесь .

8
ответ дан reshefm 11 November 2008 в 11:01
поделиться

Я достиг этого путем выполнения следующего...

  1. Настроенный таймер, который стреляет каждые 20 минут (хотя фактическая синхронизация ваше дело - я должен был работать несколько раз в течение дня).
  2. на каждом событии Tick, проверьте системное время. Сравните время с запланированным временем выполнения для Вашего метода.
  3. , Если текущее время является меньше, чем запланированное время, проверьте в некоторое персистентное устройство хранения данных для получения значения даты и времени прошлого раза, когда метод работал.
  4. , Если метод в последний раз работал больше чем 24 часа назад, выполнял метод и прячут дату и время этого, отбегают к Вашему хранилищу данных
  5. , Если метод в последний раз работал в течение прошлых 24 часов, проигнорируйте его.

HTH

*edit - пример кода в C#:: Отметьте: непротестированный...

using System;
using System.Collections.Generic;
using System.Text;
using System.Timers;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Timer t1 = new Timer();
            t1.Interval = (1000 * 60 * 20); // 20 minutes...
            t1.Elapsed += new ElapsedEventHandler(t1_Elapsed);
            t1.AutoReset = true;
            t1.Start();

            Console.ReadLine();
        }

        static void t1_Elapsed(object sender, ElapsedEventArgs e)
        {
            DateTime scheduledRun = DateTime.Today.AddHours(3);  // runs today at 3am.
            System.IO.FileInfo lastTime = new System.IO.FileInfo(@"C:\lastRunTime.txt");
            DateTime lastRan = lastTime.LastWriteTime;
            if (DateTime.Now > scheduledRun)
            {
                TimeSpan sinceLastRun = DateTime.Now - lastRan;
                if (sinceLastRun.Hours > 23)
                {
                    doStuff();
                    // Don't forget to update the file modification date here!!!
                }
            }
        }

        static void doStuff()
        {
            Console.WriteLine("Running the method!");
        }
    }
}
17
ответ дан ZombieSheep 11 November 2008 в 11:01
поделиться

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

Вот связанный вопрос (Пример, взятый оттуда).

using System;
using System.Timers;

public class Timer1
{
    private static Timer aTimer = new System.Timers.Timer(24*60*60*1000);

    public static void Main()
    {
        aTimer.Elapsed += new ElapsedEventHandler(ExecuteEveryDayMethod);
        aTimer.Enabled = true;

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

    // Specify what you want to happen when the Elapsed event is 
    // raised.
    private static void ExecuteEveryDayMethod(object source, ElapsedEventArgs e)
    {
        Console.WriteLine("The Elapsed event was raised at {0}", e.SignalTime);
    }
}
4
ответ дан Community 11 November 2008 в 11:01
поделиться

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

, Но лучшее решение (сродни более старым версиям КРОНА, таким образом, это - доказанный шаблон) должен иметь некоторые персистентные данные, с самым дешевым решением, о котором я могу думать прямо сейчас, будучи пустым файлом, проверить его последний измененный атрибут, и если это не было изменено в течение прошлых 24 часов, Вы касаетесь его и выполняете Ваш метод. Таким образом, Вы гарантируете, что метод получает выполненную первую вещь в случае, приложение отсутствует в течение выходных, например.

я сделал это в C# прежде, но был год назад в другом Job, таким образом, у меня нет кода, но это были приблизительно 20 строк (с комментариями и всеми) или около этого.

0
ответ дан Robert Gould 11 November 2008 в 11:01
поделиться

Могут быть проблемы, если перезагрузки компьютера, таким образом, Вы могли запустить приложение как сервис окон.

0
ответ дан HenryHey 11 November 2008 в 11:01
поделиться
Другие вопросы по тегам:

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