powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проблема с таймером
25 сообщений из 31, страница 1 из 2
Проблема с таймером
    #39797765
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создаю таймер
Код: c#
1.
2.
3.
4.
5.
System.Timers.Timer timer = new System.Timers.Timer();

timer.Interval = 1;  //одна миллисекунда
timer.Elapsed += OnTimedEvent;
timer.Enabled = true;



и счетчик миллисекунд
Код: c#
1.
2.
3.
4.
private void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e)
{
     msecs++;
}



теперь каждую секунду я хочу выполнить действие
Код: c#
1.
2.
3.
4.
5.
6.
7.
while (connected)
{
    if (msecs >= timestamp)
    {
         timestamp = msecs + 1000;  //16 sec
    }
}


но я попадаю сюда timestamp = msecs + 1000; не каждую секунду а каждые 16 секунд.

Есть более риалтаймовский таймер?
...
Рейтинг: 0 / 0
Проблема с таймером
    #39797774
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7Есть более риалтаймовский таймер?а есть более опытный программист?

По твоему коду ничего непонятно. Ты в отдельном потоке цикл что ли гоняешь? Накладные расходы на переключение потоков учёл?
...
Рейтинг: 0 / 0
Проблема с таймером
    #39797775
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опять же, тип msecs неизвестен, но нужно делать доступ к ней потокобезопасным.
Да и вообще, этот подход только в целях самообразования можно рассматривать, но не в реальном приложении
...
Рейтинг: 0 / 0
Проблема с таймером
    #39797776
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProОпять же, тип msecs неизвестен, но нужно делать доступ к ней потокобезопасным.
Да и вообще, этот подход только в целях самообразования можно рассматривать, но не в реальном приложении
так подскажите как сделать в реальном приложении.
...
Рейтинг: 0 / 0
Проблема с таймером
    #39797777
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Projenya7Есть более риалтаймовский таймер?а есть более опытный программист?

По твоему коду ничего непонятно. Ты в отдельном потоке цикл что ли гоняешь? Накладные расходы на переключение потоков учёл?
я обязан открыть поток. у меня несколько каналов.
...
Рейтинг: 0 / 0
Проблема с таймером
    #39797782
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно, вы ошиблись? И попадаете в указанный вами код раз в 16 миллисекунд?
...
Рейтинг: 0 / 0
Проблема с таймером
    #39797783
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дело в том, что 1 мс интервал будет работать, если на сервере есть железная поддержка. Я думал, что уже давно все современные компьютеры имеют такую поддержку, но мало ли
...
Рейтинг: 0 / 0
Проблема с таймером
    #39797785
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7так подскажите как сделать в реальном приложении.Так ты же не описываешь задачу, как я подскажу? Если тебе нужно событие раз в секунду, то зачем таймер на одну миллисекунду? Если нужно смотреть время в цикле, то зачем таймер в принципе, что мешает просто сравнивать текущее время?

Но крутить пустой цикл в ожидании наступления определенного времени, да еще и в несколько потоков - это феерический бред - просто обогревать комнату и тормозить комп.
...
Рейтинг: 0 / 0
Проблема с таймером
    #39797786
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7я обязан открыть поток. у меня несколько каналов.Тогда ты обязан знать, как работать с потоками, что такое безопасность потоков и т.п. Читай учебник, тут методом тыка не обойдешься.
...
Рейтинг: 0 / 0
Проблема с таймером
    #39797787
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProЧитай учебник...хотя бы узнаешь о существовании Task.Delay() и как им пользоваться
...
Рейтинг: 0 / 0
Проблема с таймером
    #39797793
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProShocker.ProЧитай учебник...хотя бы узнаешь о существовании Task.Delay() и как им пользоваться
я не могу тупо остановиться Task.Delay(). у меня есть массив мэйлбоксов (tx_can_msg). скажем три, первый мэйлбокс я посылаю каждые 200 мили, второй каждые 500 мили, третий каждые 1000.
Код: c#
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.
 private void SendCanFrames()
 {
       if (tx_can_msg.Length == 0) return;

       VSCAN_MSG[] l_msgs = new VSCAN_MSG[2];

       while (running)
       {
            for (int i = 0; i < tx_can_msg.Length; i++)
            {
                if (tx_msec_cnt >= can_messages[i].TimeStamp)
                {
                     l_msgs[0] = tx_can_msg[i];

                     // send CAN frame
                     CanDevice.Write(l_msgs, 1, ref written_cnt);

                     can_messages[i].TimeStamp = tx_msec_cnt + can_messages[i].Period;
                    
                     this.Invoke(
                      (MethodInvoker)delegate
                       {
                              can_messages[i].CountRun++;
                              dataGridViewCanTx.Rows[i].Cells[4].Value = can_messages[i].CountRun.ToString();
                       });   
                       
                    }
                }
            }         
        }
...
Рейтинг: 0 / 0
Проблема с таймером
    #39797798
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7первый мэйлбокс я посылаю каждые 200 мили, второй каждые 500 мили, третий каждые 1000.
Либо 3 таймера, либо один таймер по 100 миллисекунд
...
Рейтинг: 0 / 0
Проблема с таймером
    #39797799
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79jenya7первый мэйлбокс я посылаю каждые 200 мили, второй каждые 500 мили, третий каждые 1000.
Либо 3 таймера, либо один таймер по 100 миллисекунд
у меня есть частота посылки 20 миллисекунд.
...
Рейтинг: 0 / 0
Проблема с таймером
    #39797800
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jenya7Arm79пропущено...

Либо 3 таймера, либо один таймер по 100 миллисекунд
у меня есть частота посылки 20 миллисекунд.
и почему три таймера? я сравниваю глобальный счетчик миллисекунд с периодом каждого мэйлбокса. в микроконтролере это прекрасно работает.
...
Рейтинг: 0 / 0
Проблема с таймером
    #39797802
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я напомню, что частота срабатывания таймера зависит от системных часов. То есть в принципе, если речь о таймере, нужно помнить, что на некоторых машинах он не будет срабатывать чаще раза в 16 мс.

Далее, что мешает завести по таймеру на каждый мейлбокс? Точнее, на каждый нужный интервал отправки?
...
Рейтинг: 0 / 0
Проблема с таймером
    #39797805
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79Я напомню, что частота срабатывания таймера зависит от системных часов. То есть в принципе, если речь о таймере, нужно помнить, что на некоторых машинах он не будет срабатывать чаще раза в 16 мс.

Далее, что мешает завести по таймеру на каждый мейлбокс? Точнее, на каждый нужный интервал отправки?
ну допустим я заведу несколькро таймеров. как это улучшит резолюцию таймера? дот нет как мне кажется с риалтаймом плохо дружит.
...
Рейтинг: 0 / 0
Проблема с таймером
    #39797806
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7скажем три, первый мэйлбокс я посылаю каждые 200 мили, второй каждые 500 мили, третий каждые 1000.значит делай три таймера
...
Рейтинг: 0 / 0
Проблема с таймером
    #39797808
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7,

Windows вообще не реайл тайм ОС, поэтому рассчитывать на миллисекундную точность бессмысленно, какой бы язык мы не брали.

Можно поизвращаться с Fiber, но явных плюсов я не вижу

Заведите однопоточное приложение (или выделите один поток), назначьте через affinity на 1 процессор, внутри него цикл, который сам считывает время и определяет моменты старта.
...
Рейтинг: 0 / 0
Проблема с таймером
    #39797809
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7,

Что за задача? Может вам атомные часы нужны?
...
Рейтинг: 0 / 0
Проблема с таймером
    #39797811
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123jenya7,

Что за задача? Может вам атомные часы нужны?
задача посылать данные скажем каждые 10 миллисекунд.
...
Рейтинг: 0 / 0
Проблема с таймером
    #39797812
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7задача посылать данные скажем каждые 10 миллисекунд.делать внешний управляемый микроконтроллер. Как сказали выше, под виндой такие приложения не делают.
...
Рейтинг: 0 / 0
Проблема с таймером
    #39797818
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7Petro123jenya7,

Что за задача? Может вам атомные часы нужны?
задача посылать данные скажем каждые 10 миллисекунд.еще выше на ранг. Зачем? Куда?
...
Рейтинг: 0 / 0
Проблема с таймером
    #39797820
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123jenya7пропущено...

задача посылать данные скажем каждые 10 миллисекунд.еще выше на ранг. Зачем? Куда?
в принципе минимально 20. но для стресс тест мне нужно 10.

родная утилита умеет посылать даже каждые 5 мили. не знаю на чем ее писали.
...
Рейтинг: 0 / 0
Проблема с таймером
    #39797823
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так вроде работает
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
TimeSpan interval;
DateTime dt1 = new DateTime();
DateTime dt2 = new DateTime();

while (connected == true)
{
    dt1 = DateTime.Now;
    interval = (dt1 - dt2)

    if (interval.TotalMilliseconds >= 20)
    {
          dt2 = DateTime.Now;
     }
}
...
Рейтинг: 0 / 0
Проблема с таймером
    #39797824
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7,

это работает, только если поток на одном процессоре, поэтому я и говорил про аффинити.

как только планировщик потоков перекинет на другой процессор (а то и ядро), вы можете получить сотни мс задержки
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проблема с таймером
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]