Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778

Чередование исполнения методов в loop

28.09.2019, 20:27. Показов 3177. Ответов 44
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем!

алгоритм такой:

- Potatoes();

-пауза, например 1сек.

- Tomatoes();

-пауза, например 1сек.

- Potatoes();

и так далее в loop

можно async.

Но на sync тоже бы хотелось взглянуть.

Спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.09.2019, 20:27
Ответы с готовыми решениями:

Замеры времени исполнения методов
Есть задача. Написать методы поиска элементов в массиве (например, поиск всех положительных элементов) в виде: 1. метода,...

Список методов для последовательного исполнения
Добрый день. Возможно ли создать список методов и последовательно запускать их, передавая нужные элементы? Может какая-то другая...

Warining For-loop variable 'i' may be undefined after loop
Что не так с кодом? При компиляции программы появляется предупреждение:" Unit1.pas(46):For-loop variable 'i' may be undefined after...

44
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18396 / 14327 / 5370
Регистрация: 17.03.2014
Сообщений: 29,002
Записей в блоге: 1
29.09.2019, 11:16
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Bulky Посмотреть сообщение
Но тайминг tolerance был ужасающим.
Если под этим ты имеешь в виду допустимое отклонение, допускаемое отклонение или погрешность, то т.к. Windows не является системой реального времени, то паузы через Thread.Sleep/Task.Delay не гарантируют что указанный интервал будет точно выдерживаться. Говорят что multimedia timers обеспечивают высокую точность срабатывания, но я их никогда не пробовал применять. Также пишут что мультимедийные таймеры уже устарели, и следует применять timer queues. В обоих случаях интересно как поведет себя система если запустить несколько таких таймеров (больше чем физических ядер).
2
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
29.09.2019, 11:26  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Если под этим ты имеешь в виду допустимое отклонение, допускаемое отклонение или погрешность
точно это я и имею ввиду!

Цитата Сообщение от OwenGlendower Посмотреть сообщение
Windows не является системой реального времени
так и есть, поэтому если будет укладываться в 100 ms, будет более чем достаточно. Другого и не жду от Windows.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
29.09.2019, 16:51
Цитата Сообщение от Bulky
алгоритм такой

можно async.

Но на sync тоже бы хотелось взглянуть.
Если вам нужно фоновый вызов методов, то никакого sync априори не может быть. В синхронном коде бесконечный цикл провести приложение.

Для требуемой вам точности ~1сек лучше всего использовать таймер.
Если код метода не связан с UI-элементами, то я бы использовал System.Threading.Timer
Сдаёте поле-флаг bool IsTomatoes. И на входе в метод таймера инвертируете флаг и от его значения вызываете один из нужных методов.
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
29.09.2019, 16:58
Цитата Сообщение от Bulky
так и есть, поэтому если будет укладываться в 100 ms, будет более чем достаточно. Другого и не жду от Windows.
Реальная точность таймера выполняемого в индивидуальном потоке отклонение не более 5мс.
В каких-то тяжёлых случаях, конечно, может быть и больше - вплоть до зависания.
0
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
29.09.2019, 18:34  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Bulky, в отдельном потоке можно код запустить. И если Tomatoes/Potatoes не требуется доступ к UI-потоку, то это очень простая в реализации схема
В отдельном потоке запустил. Выглядит неплохо. Δ ~1,016 при Thread.Sleep(1000);

Я хотел спросить следующее.

Есть поток, допустим Cucumbers();


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
Cucumbers()
 
{
 while (true)
 {
 
    try
      {
 
         //чего-нибуль делаем
 
      }
 
    catch (Exception ex)
      {
 
        //сообщение
 
      }
 
    Thread.Sleep(1000); // пауза
 }
 
           
}
так сказать пользуясь случаем можно ли впихнуть туда еще один оператор while с методами potatoes, tomatoes? И как быть с Thread.Sleep(1000). Я к тому, что не хочется плодить потоки. Или можно?
Пробовал, -несовместимо.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
29.09.2019, 19:17
Цитата Сообщение от Bulky
Выглядит неплохо. Δ ~1,016 при Thread.Sleep(1000);
По-моему, у слип точность значительно хуже чем у System.Threading.Timer
0
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
29.09.2019, 19:44  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
По-моему, у слип точность значительно хуже чем у System.Threading.Timer
Вы имеете ввиду

C#
1
timer = new System.Timers.Timer();

под System.Threading.Timer?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
29.09.2019, 19:49
Попробую написать код здесь.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class CustomClass
{
    void Tomatoes(){}
    void Potatoes() {}
    bool IsTomatoes;
 
    read-only Timer timer;
   public CustomClass()
   {
         timer = new Timer(OnTimer, null, 1000, 1000);
   }
 
   void OnTimer(object state)
   {
        IsTomatoes = !IsTomatoes;
        if (IsTomatoes)
             Tomatoes();
        else
              Potatoes();
   }
}
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
29.09.2019, 20:01
Цитата Сообщение от Bulky
Вы имеете ввиду
Нет.
C#
1
System.Threading.Timer timer = new System.Threading.Timer();
Но можно использовать и System.Timers.Timer.
По точности он такой же. Так же исполняется в другом потоке.
Есть отличия, но для данного случая они не принципиальна.
Только его инициализировать надо по другому.
Код выше придётся переделать.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
29.09.2019, 20:06
Bulky, точно не скажу.
Но вроде читал где-то, что слип синхронизируется через событие обновления монитора.
Или ещё какую-то хрень. И когда проходит время сна, задача проснется только на следуем обновлении кадра.
Поэтому, точность слипа около 16мс - 60 кадров в секунду.
2
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
29.09.2019, 20:33  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
И когда проходит время сна, задача проснется только на следуем обновлении кадра.
Оппа... т.е. он может подложить свинку вместе со screensaver. Это вы имеете ввиду?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18396 / 14327 / 5370
Регистрация: 17.03.2014
Сообщений: 29,002
Записей в блоге: 1
29.09.2019, 21:01
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Но вроде читал где-то, что слип синхронизируется через событие обновления монитора.
Или ещё какую-то хрень. И когда проходит время сна, задача проснется только на следуем обновлении кадра.
Поэтому, точность слипа около 16мс - 60 кадров в секунду.
Точность Sleep по умолчанию в самом деле около 16 мс, но я совсем не уверен что это привязано к частоте обновления экрана.

Добавлено через 2 минуты
И в моем понимании у Thread.Sleep и у таймеров одинаковая точность.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
29.09.2019, 21:17
Цитата Сообщение от Bulky
т.е. он может подложить свинку вместе со screensaver. Это вы имеете ввиду?
По-моему нет.
Когда экран гаснет это же не означает что покоилось обновление кадров.
Но для уверенности - проверьте.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
29.09.2019, 21:21
Цитата Сообщение от OwenGlendower
но я совсем не уверен что это привязано к частоте обновления экрана
Спорить не буду.
Даже не помню откуда такая информация застряла в голове.

Цитата Сообщение от OwenGlendower
И в моем понимании у Thread.Sleep и у таймеров одинаковая точность.
Я без компа - проверить сам не могу.
Если не трудно сделайте небольшой тест.
0
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
29.09.2019, 23:00
Цитата Сообщение от Bulky Посмотреть сообщение
тайминг tolerance был ужасающим
что это такое?
0
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
29.09.2019, 23:08  [ТС]
Цитата Сообщение от Рядовой Посмотреть сообщение
что это такое?
другими словами не выдерживающий никакие допуски -тайминг.

тайминг - термин из области электроники или последовательной передачи данных, если хотите. Там без тайминга, никак.
0
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
30.09.2019, 07:36
Bulky, tolerance это что?
0
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
30.09.2019, 07:47  [ТС]
Цитата Сообщение от Рядовой Посмотреть сообщение
Bulky, tolerance это что?
допуск по англ.
0
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
30.09.2019, 09:53  [ТС]
OwenGlendower,
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Если не трудно сделайте небольшой тест.
неожидано невооруженным глазом, боюсь даже в цифры заглядывать.


Timer = new System.Threading.Timer(OnTimer, null, 1000, 1000); -Зеленый. Элд Хасп,

Thread.Sleep(1000); -Синий. OwenGlendower,

на амплитуду не обращайте внимание, так сделаны скрины.
Миниатюры
Чередование исполнения методов в loop   Чередование исполнения методов в loop  
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
30.09.2019, 10:24
Цитата Сообщение от Bulky
на амплитуду не обращайте внимание
Цифр дайте.
Так не понятен результат.
У обоих амплитуда 16мс?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.09.2019, 10:24

Warining For-loop variable 'i' may be undefined after loop
Как исправить код, что бы программа работала корректно. var Form1: TForm1; implementation {$R *.dfm} procedure...

Циклы: For…Next, For Each…Next, Do While…Loop, Do Until…Loop
кому не лень, помогите решить задачу, самому разбираться времени нету, и так работы много.. само задание - нужно сделать 13 вариант.. ...

Напишите реализацию методов, предоставляющих доступ к данным класса. Отобразите в программе работу этих методов
Реализация методов класса. Напишите реализацию методов, предоставляющих доступ к данным класса. Отобразите в программе...

чередование
Спасайте. Дана матрица размера M x N. Вывести ее элементы в следующем порядке: первая строка слева направо, вторая строка справа налево,...

Чередование классов
Вот у меня получилось что при клике на кнопку применяется класс display0, а как сделать чтобы при повторном клике примерился класс display1...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru