1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| private const int PERIOD = 20;
private static int _occurencesDelayed = 0;
static void Main(string[] args)
{
CancellationTokenSource cancellationToken = new CancellationTokenSource();
Thread thread2 = new Thread(periodicTask2);
thread2.Start(cancellationToken.Token);
Console.WriteLine("En attente de la fin des tâches...");
Thread.Sleep(10000);
cancellationToken.Cancel();
thread2.Join();
Console.WriteLine("Tâches terminées");
Console.WriteLine("Nombre d'occurrences avec retard : {0}", _occurencesDelayed);
Console.ReadLine();
}
public static void periodicTask2(object p)
{
CancellationToken cancellationToken = (CancellationToken)p;
DateTime date = DateTime.Now;
DateTime startTime = DateTime.Now;
int count = 0;
int next;
while (!cancellationToken.IsCancellationRequested)
{
date = date.AddMilliseconds(PERIOD);
TimeSpan delta = DateTime.Now - startTime.AddMilliseconds(count * PERIOD);
taskBody("1", DateTime.Now, Convert.ToInt32(delta.TotalMilliseconds));
count++;
next = Convert.ToInt32((date - DateTime.Now).TotalMilliseconds);
if (next >= 0)
{
Thread.Sleep(next);
}
else
{
_occurencesDelayed ++;
}
}
} |
Partager