Отслеживание изменений состояний программы в отдельном потоке - 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);
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.2 из 5
Похожие ответы