powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Странное поведение потока
7 сообщений из 32, страница 2 из 2
Странное поведение потока
    #38960753
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarismyauchaВообще-то, все это я делаю в WPF. Может он свой отпечаток накладывает?!

Thread.Sleep гарантирует, что поток уснет на период, не меньший, чем ты указал. Но он не гарантирует, что поток проснется немедленно после указанного периода

Не видел в разьяснениях про квант времени -
Виндовс не реал тайм система, потому, что всем запущеным потокам выдает по 15 милисекунд на поработать.
Потом отдает время следующему потоку.
Если система не занята, то высока вероятность, что следующий поток это будет тот же самый.
Thread.Sleep(0) отпускает квант, и время передается другому потоку. Thread.Sleep(0) == Thread.Sleep(15) по функциональности.

По поводу реал-тайм систем - на дотнете их делать можно, но при помощи негативной логики -
вы должны писать проверку в цикле, выполнение какого-нибудь условия на внешнем устройстве (установленный бит или типа того), и только после этого давать следующую команду.

Быть уверенным в интервалах нельзя.
...
Рейтинг: 0 / 0
Странное поведение потока
    #38960765
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
myauchaНе тупо читаю, а с привязкой ко времени. Файл сформирован и зафиксирован, новые данные в него не поступают. А если быть точным, то файлов несколько и в каждом свои технические события со временем возникновения. Я, по сути, их просто проигрываю

Roman Mejtesтак же есть SystemFileWatcher который может возбуждать событие, если файл был изменён.
...
Рейтинг: 0 / 0
Странное поведение потока
    #38960772
myaucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2myauchaНе тупо читаю, а с привязкой ко времени. Файл сформирован и зафиксирован, новые данные в него не поступают. А если быть точным, то файлов несколько и в каждом свои технические события со временем возникновения. Я, по сути, их просто проигрываю

Roman Mejtesтак же есть SystemFileWatcher который может возбуждать событие, если файл был изменён.

И к чему это?!
...
Рейтинг: 0 / 0
Странное поведение потока
    #38960789
myaucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvikmyauchaя ... писал код аналогичный следующему
for (int i = 0; i<1000; i++) Thread.Sleep(1)
и он отрабатывал за секунду
Брехня.
Если только кто-то не пошаманил с функцией timeBeginPeriod. тынц В общем, путем нехитрых экспериментов (проверил практически все, что мне тут посоветовали) самым стабильным решением оказалось применение такой вот конструкции

TimeBeginPeriod(1);
Thread.Sleep(1);
TimeEndPeriod(1);

За ссылку отдельное спасибо petalvik-у. Без TimeBeginPeriod у меня тоже работало, но только при запущенном браузере Chrome. Закрываешь хром - Sleep виснет. Но! Даже при закрытом хроме, если в WPF приложении нажать на кнопку (просто обычный Button, помещенный на форму без всякой логики), то Sleep тоже начинает работать стабильно. Видимо WPF и хром у себя где-то используют TimeBeginPeriod тоже.

Кстати, читал попутно, что Thread.Sleep(0) тождественно Thread.Sleep(15). У меня при замерах Thread.Sleep(0), в большинстве случаев, вообще отрабатывал без задержки, то есть цикл с 1000 итераций и Sleep(0) занимал 0 мсек вне зависимости от того запущен браузер или нет, есть WPF или нет.
...
Рейтинг: 0 / 0
Странное поведение потока
    #38960824
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
myauchaКстати, читал попутно, что Thread.Sleep(0) тождественно Thread.Sleep(15). У меня при замерах Thread.Sleep(0), в большинстве случаев, вообще отрабатывал без задержки, то есть цикл с 1000 итераций и Sleep(0) занимал 0 мсек вне зависимости от того запущен браузер или нет, есть WPF или нет.
И о чем это говорит, по вашему? Вероятность. Если даже отдали квант в середине цикла - вы этого не заметите.
Просто имейте в виду, что ваша программа идет вперед маленькими кусочками.
О моменте перерыва она не знает.

Хотите замерять точнее - надо использовать Stopwatch.
...
Рейтинг: 0 / 0
Странное поведение потока
    #38960855
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вот ещё что хочу сказать.
Если нужно выполнять некое действие тысячу раз в секунду (в среднем один раз в одну миллисекунду), то можно поступать так, как делают в играх для программирования плавного движения. Засекаем время входа при начале очередной итерации цикла, выполняем действие. При следующей итерации сравниваем текущее время с запомненным: если прошла всего одна миллисекунда - выполняем наше действие один раз. Прошло 50 мс - выполняем действие 50 раз.
Таким образом можно добиться выполнения действия нужное количество раз. Однако интервалы между ними будут разными.
...
Рейтинг: 0 / 0
Странное поведение потока
    #38960873
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvikЗасекаем время входа при начале очередной итерации цикла, выполняем действие. При следующей итерации сравниваем текущее время с запомненным: если прошла всего одна миллисекунда - выполняем наше действие один раз. Прошло 50 мс - выполняем действие 50 раз..

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


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