Отслеживание изменений состояний программы в отдельном потоке - C#
Формулировка задачи:
Как отследить изменения состояний программы, в потоке отдельном от основного потока, я придумал вариант только с таймером но как его запустить в отдельном потоке не знаю, хотел использовать много поточный таймер но он создает каждый тик в новом потоке а мен необходимо чтобы новый тик не начинался пока не закончится предыдущий
Решение задачи: «Отслеживание изменений состояний программы в отдельном потоке»
textual
Листинг программы
using System;
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
private static int a, b, c;
static void Main(string[] args)
{
Thread t1 = new Thread(Init);
Thread t2 = new Thread(IncrementValues);
t1.Start();
t2.Start();
Console.ReadKey();
t2.Abort();
while (t1.IsAlive && t2.IsAlive) ;
}
static void Start(object o)
{
string postfix = string.Empty;
DateTime ts = DateTime.Now;
a = ts.Second;
Console.Clear();
if (c < a)
postfix = "c < a ";
else
postfix = "c > a ";
if (b < a)
postfix += " b < a ";
else
postfix += " b > a ";
Console.WriteLine("Time is {0}:{1}\n{2} a({3}) b({4}) c({5})\nPress any key to exit...", ts.ToShortTimeString(), ts.Second.ToString(), postfix, a.ToString(), b.ToString(), c.ToString());
}
static void Init(object o)
{
a = DateTime.Now.Second;
b = 60 - DateTime.Now.Minute;
c = 60 - b;
Timer tmr = new Timer(new TimerCallback(Program.Start), DateTime.Now.TimeOfDay, 0, 1000);
}
static void IncrementValues(object o)
{
Thread.Sleep((60 - DateTime.Now.Second) * 1000);
do
{
b = 60 - DateTime.Now.Minute;
c = 60 - b + 5;
Thread.Sleep(60000);
} while (1 == 1);
}
}
}