Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/26: Рейтинг темы: голосов - 26, средняя оценка - 4.54
 Аватар для QuakerRUS
1468 / 1009 / 456
Регистрация: 30.10.2017
Сообщений: 2,799

Timer в привязке к системному времени

17.11.2019, 00:18. Показов 5082. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Разбирался с классом System.Threading.Timer и возник следующий вопрос, может кто сможет подсказать. Есть ли какой то более-менее стандартный способ без изобретения велосипеда создать таймер с обратным вызовом, который будет привязан к системному времени? Чтобы запускался метод, например, каждую секунду синхронно с системным временем. И еще подобный вопрос: есть ли стандартный способ для создания разового вызова, задав его по, например, DateTime?

Добавлено через 2 минуты
Попробовал через такой способ, но время потихоньку рассинхронизируется.

C# Скопировано
1
new Timer(new TimerCallback(PrintTime), null, 1000 - DateTime.Now.Millisecond, 1000);
Добавлено через 7 минут
Ну и в качестве велосипеда можно что то такое реализовать.

C# Скопировано
1
2
3
4
5
while (true)
{
    Thread.Sleep(1000 - DateTime.Now.Millisecond);
    PrintTime();
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.11.2019, 00:18
Ответы с готовыми решениями:

Запуск формы по системному времени
Доброго утра всем!!! :) подскажите, как запустить форму по системному времени допустим в 10:30 и закрыть ее в 12:00 Заранее спасибо!

Фильтрация с привязкой к системному времени
Добрый день! Необходимо сделать запрос, который бы автоматически брал системную дату и делал на ее основе фильтр таблицы. В таблице...

Как привязаться к системному времени?
Как привязаться к системному времени в Windows Forms? Смысл в том, что есть приложение-планировщик дел со своей БД, в котором можно...

14
3565 / 2506 / 1174
Регистрация: 14.08.2016
Сообщений: 8,216
17.11.2019, 01:21
Лучший ответ Сообщение было отмечено QuakerRUS как решение

Решение

Цитата Сообщение от QuakerRUS Посмотреть сообщение
который будет привязан к системному времени
ЕМНИП, винда, на системное время(а то это такое?не BIOS ли время?!) плевать хотела, у таймеров, в шарпе, своя точность, чай не QNX и прочие RT весчи
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
15958 / 11094 / 2864
Регистрация: 21.04.2018
Сообщений: 32,573
Записей в блоге: 2
17.11.2019, 08:39
Лучший ответ Сообщение было отмечено QuakerRUS как решение

Решение

QuakerRUS, как уже ответил Diamante, Windows это не система реального времени.
Таймеры Net имеют точность порядка 20 мс. И то если ОС относительно не перегружена.

Реализация задуманного вами требует создания какого-то кастомного таймера с постоянной синхронизацией времени.
Если оно вам надо, то реализовать не очень сложно.
1
 Аватар для QuakerRUS
1468 / 1009 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
17.11.2019, 10:28  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Если оно вам надо, то реализовать не очень сложно.
Да я уже его в конце первого поста и реализовал собственно, вопрос как раз был в наличии какого то стандартного способа. Так как не хотелось бы изобретать велосипед, да и поток выделять под это придется.
0
Эксперт .NET
 Аватар для Rius
11422 / 7302 / 1617
Регистрация: 25.05.2015
Сообщений: 22,072
Записей в блоге: 14
17.11.2019, 11:09
Цитата Сообщение от QuakerRUS Посмотреть сообщение
есть ли стандартный способ для создания разового вызова, задав его по, например, DateTime?
Планировщик задач Windows.
Например, https://github.com/dahall/taskscheduler
1
 Аватар для QuakerRUS
1468 / 1009 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
17.11.2019, 11:09  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Планировщик задач Windows.
Это как? Стороннее приложение, запускающееся по расписанию? Тем более запускать надо каждую секунду, это мне кажется будет накладнее, чем поток выделить с вечным циклом.
0
Эксперт .NET
 Аватар для Rius
11422 / 7302 / 1617
Регистрация: 25.05.2015
Сообщений: 22,072
Записей в блоге: 14
17.11.2019, 11:11
Цитата Сообщение от QuakerRUS Посмотреть сообщение
Это как? Стороннее приложение, запускающееся по расписанию?
Ваше, а не стороннее.
А может и кусок кода - надо смотреть документацию на эту обёртку.
Цитата Сообщение от QuakerRUS Посмотреть сообщение
Тем более запускать надо каждую секунду, это мне кажется будет накладнее, чем поток выделить с вечным циклом.
В цитате сказано про разовый вызов.
0
 Аватар для QuakerRUS
1468 / 1009 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
17.11.2019, 11:25  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
В цитате сказано про разовый вызов.
В цитате про оба случая сказано. Про разовый вызов будет не сильно отличаться от того, что я привел в конце первого поста. Тоже будет занимать поток с ожиданием.

C# Скопировано
1
2
Thread.Sleep(d - DateTime.Now);
PrintTime();
Добавлено через 7 минут
Хотя возможно в этом способе тоже будет рассинхронизация по времени при большом ожидании, надо чаще синхронизироваться.
0
Эксперт .NET
 Аватар для Rius
11422 / 7302 / 1617
Регистрация: 25.05.2015
Сообщений: 22,072
Записей в блоге: 14
17.11.2019, 11:30
Цитата Сообщение от QuakerRUS Посмотреть сообщение
Хотя возможно в этом способе тоже будет рассинхронизация по времени при большом ожидании, надо чаще синхронизироваться.
Не понятно, в каком-таком этом, но планировщик заданий можно планировать на годы. Лишь бы ПК к моменту выполнения запланированного задания был включён.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
15958 / 11094 / 2864
Регистрация: 21.04.2018
Сообщений: 32,573
Записей в блоге: 2
17.11.2019, 11:31
QuakerRUS, я имел ввиду свой тип таймера.
Что-то подобное вашему методу, но в нормальной оболочке.
1
 Аватар для QuakerRUS
1468 / 1009 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
17.11.2019, 11:33  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Не понятно, в каком-таком этом
В коде, который я привел в последнем сообщении.

Цитата Сообщение от Rius Посмотреть сообщение
планировщик задач можно планировать на годы. Лишь бы ПК к моменту выполнения запланированной задачи был включён.
Если нужен запуск в момент, когда приложение не запущено, то тут, конечно, однозначно планировщик задач использовать надо.
0
Эксперт .NET
 Аватар для Rius
11422 / 7302 / 1617
Регистрация: 25.05.2015
Сообщений: 22,072
Записей в блоге: 14
17.11.2019, 11:53
Цитата Сообщение от QuakerRUS Посмотреть сообщение
В коде, который я привел в последнем сообщении.
Sleep вообще нельзя использовать для точных повторов.
Если не хотите велосипедить, то реализации без планировщика Windows тоже уже реализованы и доступны на github/nuget.
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
15958 / 11094 / 2864
Регистрация: 21.04.2018
Сообщений: 32,573
Записей в блоге: 2
17.11.2019, 12:32
Rius, как я понял QuakerRUS нужно не столько точность каждого периода, сколько синхронизация таймера по ОС часам.
То есть интервал если установлен 1с, то чтобы срабатывал каждую секунду в пределах точности 20мс.
Сейчас же таймеры будут постоянно смешать время срабатывания вперёд в среднем на 10мс.
И примерно через 100 секунд одна будет потеряна.

Добавлено через 4 минуты
QuakerRUS, есть ещё приём для синхронизации.
В обработчике события проверяете время до конца следующего интервала и, соответственно, корректируете интервал таймера.
Можно для этого сделать оболочку над дефолтным таймером или производный от него.
0
 Аватар для QuakerRUS
1468 / 1009 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
17.11.2019, 12:37  [ТС]
Элд Хасп, да, это все можно сделать, тут у меня проблем нет. Основной вопрос был про наличие стандартного метода во фреймворке, чтобы не писать этот велосипед и не занимать поток. Как я понял из ответов, такого метода нет.
0
Эксперт .NET
 Аватар для Rius
11422 / 7302 / 1617
Регистрация: 25.05.2015
Сообщений: 22,072
Записей в блоге: 14
17.11.2019, 12:39
Элд Хасп, я как раз не про периоды, а про точное срабатывание в запланированное время. Типа cron из линукса. Или основанный на нём планировщик в laravel. Или его реализация для net core - corevel.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.11.2019, 12:39
Помогаю со студенческими работами здесь

Нужно заполнить список по системному времени
Здравствуйте, такое задания.Нужно заполнить список элементов через системное время(ЧЧ:ММ:СС)пример(12:25:13). Тоесть, первый элемент...

Добавление одной минуты к системному времени
Добрый день, можете подсказать как можно организовать батник, который будет добавлять 1 минуту. В CMD я прописывал так time 15:23 Enter...

Выделение ячейки цветом по системному времени в Excel
Подскажите пожалуйста, как мне задать зависимость цвета ячейки от времени? Вот скажем есть список дел, которые нужно выполнить до...

Удаление старых архивов без привязки к системному времени
Доброго времени суток. Прошу помощи с решением такой задачи: Нужна архивация средствами 7z и условием - оставлять в каталоге архивации...

Timer обновление времени
Подскажите есть таймер и в нем есть переменная отвечающая за время TimeEdit. Так вот когда у меня уже запустился таймер и потом в...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Рекурсивные типы в Python
py-thonny 07.04.2025
Рекурсивные типы - это типы данных, которые определяются через самих себя или в сочетании с другими типами, которые в свою очередь ссылаются на исходный тип. В мире программирования такие структуры. . .
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
NullReferenced 07.04.2025
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от. . .
Обмен данными в микросервисной архитектуре
ArchitectMsa 06.04.2025
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в. . .
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Mr. Docker 06.04.2025
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при. . .
Async/await в TypeScript
run.dev 06.04.2025
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая. . .
Многопоточность в C#: Синхронизация потоков
UnmanagedCoder 06.04.2025
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно. . .
TypeScript: Классы и конструкторы
run.dev 06.04.2025
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой. . .
Многопоточное программирование: Rust против C++
golander 06.04.2025
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих. . .
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
Реляционная модель и правила Кодда: фундамент современных баз данных
Codd 05.04.2025
Конец 1960-х — начало 1970-х годов был периодом глубоких трансформаций в области хранения и обработки данных. На фоне растущих потребностей бизнеса и правительственных структур существовавшие на тот. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер