@ Метод Алексея Фрунзе прост, но он очень медленный. Вы должны использовать 32-битный целочисленный метод @ chill выше. Другим простым методом без какого-либо умножения или деления является double dabble . Это может работать медленнее, чем алгоритм холода, но намного быстрее, чем у Алексея. После запуска у вас будет упакованный BCD десятичного числа
Смотрите на quartz.net . Это - библиотека планирования для .net.
более конкретно смотрят здесь .
Я достиг этого путем выполнения следующего...
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!");
}
}
}
Если время, когда это выполняется, не релевантно и может быть сброшено каждый раз, когда программа запускается, можно просто установить таймер, который является самой легкой вещью сделать. Если это не приемлемо, это начинает становиться более сложным, как решение, представленное здесь и который все еще не решает проблему персистентности, необходимо заняться этим отдельно, если Вы действительно хотите сделать, какие Запланированные задачи были бы. Я действительно рассмотрел бы снова, стоит ли пройти всю проблему для тиражирования совершенно хорошей существующей функциональности.
Вот связанный вопрос (Пример, взятый оттуда).
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);
}
}
Вы могли время запроса и работать, если Ваш в течение некоторого периода времени, тот путь, даже если машина уходит, Вы будете называть метод или использовать таймер как предложение Vinko.
, Но лучшее решение (сродни более старым версиям КРОНА, таким образом, это - доказанный шаблон) должен иметь некоторые персистентные данные, с самым дешевым решением, о котором я могу думать прямо сейчас, будучи пустым файлом, проверить его последний измененный атрибут, и если это не было изменено в течение прошлых 24 часов, Вы касаетесь его и выполняете Ваш метод. Таким образом, Вы гарантируете, что метод получает выполненную первую вещь в случае, приложение отсутствует в течение выходных, например.
я сделал это в C# прежде, но был год назад в другом Job, таким образом, у меня нет кода, но это были приблизительно 20 строк (с комментариями и всеми) или около этого.
Могут быть проблемы, если перезагрузки компьютера, таким образом, Вы могли запустить приложение как сервис окон.