OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 17 Август, 2019 13:53

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 98 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Re: Большой проект на BlackBox
СообщениеДобавлено: Среда, 12 Ноябрь, 2008 06:28 

Зарегистрирован: Вторник, 13 Март, 2007 06:15
Сообщения: 93
Откуда: Кемерово, КузГТУ
Александр Ильин писал(а):
Сергей Губанов писал(а):
Попробуйте так:
Services.DoLater(action, Services.Ticks() + 5000);
А я бы сделал так:
Services.DoLater(action, Services.Ticks() + 5 * Services.resolution);

Возможно, глупый вопрос: а зачем в выражении Services.Ticks() + 5 * Services.resolution используется Services.Ticks()? Эта функция возвращает огромное число. В остальном, кажется разобрался. Тики происходят Services.resolution, то есть 1000 раз в секунду.
Пользуясь случаем, задам ещё вопрос. Значительно ли кооперативная многозадачность отличается от многопоточности, с точки зрения простого пользователя, которого не интересует техническая сторона вопроса? (круто загнул! :) )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Большой проект на BlackBox
СообщениеДобавлено: Среда, 12 Ноябрь, 2008 07:22 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2931
Откуда: г. Ярославль
Процедура DoLater регистрирует действие, которое должно произойти в определённый момент времени. Вот мы и вычисляем этот момент с помощью Services.Ticks(), которая возвращает количество прошедших от полуночи миллисекунд.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Большой проект на BlackBox
СообщениеДобавлено: Среда, 12 Ноябрь, 2008 08:10 

Зарегистрирован: Вторник, 13 Март, 2007 06:15
Сообщения: 93
Откуда: Кемерово, КузГТУ
Иван Кузьмицкий писал(а):
Процедура DoLater регистрирует действие, которое должно произойти в определённый момент времени. Вот мы и вычисляем этот момент с помощью Services.Ticks(), которая возвращает количество прошедших от полуночи миллисекунд.

Спасибо! Вот теперь всё понятно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Большой проект на BlackBox
СообщениеДобавлено: Среда, 12 Ноябрь, 2008 09:16 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1199
Иван Кузьмицкий писал(а):
Вот мы и вычисляем этот момент с помощью Services.Ticks(), которая возвращает количество прошедших от полуночи миллисекунд.

Только не от полуночи, а от старта Виндовса.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Большой проект на BlackBox
СообщениеДобавлено: Среда, 12 Ноябрь, 2008 09:20 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2309
Откуда: Россия, Томск
rv82 писал(а):
Значительно ли кооперативная многозадачность отличается от многопоточности, с точки зрения простого пользователя, которого не интересует техническая сторона вопроса? (круто загнул! :) )
При продуманной и качественной реализации с точки зрения пользователя разницы нет.
Trurl писал(а):
Иван Кузьмицкий писал(а):
Services.Ticks() возвращает количество прошедших от полуночи миллисекунд.
Только не от полуночи, а от старта Виндовса.
Виндовс поднимается в полночь...
: ))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Большой проект на BlackBox
СообщениеДобавлено: Среда, 12 Ноябрь, 2008 10:13 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2931
Откуда: г. Ярославль
Да, точно, я ошибся. Services.Ticks использует винапишную GetTickCount. А вот в доке к Services написано, что Services.Ticks возвращает именно что текущее время, без упоминания начала отсчёта от старта системы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Большой проект на BlackBox
СообщениеДобавлено: Среда, 12 Ноябрь, 2008 13:47 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
rv82 писал(а):
Пользуясь случаем, задам ещё вопрос. Значительно ли кооперативная многозадачность отличается от многопоточности, с точки зрения простого пользователя, которого не интересует техническая сторона вопроса? (круто загнул! :) )
У меня на днях возник где-то сходный вопрос: если мне для встроенного приложения надо полноценно нагрузить несколько (ну, 2 :) ) ядер микропроцессора, не будет ли достаточно просто реализовать аналог виртовского модуля Processes (на основе сопрограмм)?
Ведь здесь главное, что ядра не простаивают, работа делается.

А с точки зрения пользователя ПК может быть существенным желание, чтобы поток, реагирующий на его действия, не заставлял его долго ждать и подозревать, что программа "зависла".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Большой проект на BlackBox
СообщениеДобавлено: Среда, 12 Ноябрь, 2008 14:18 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Тут уместно было бы ещё упомянуть, что один тик не равен одной миллисекунде в точности, он чуть-чуть дольше.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Большой проект на BlackBox
СообщениеДобавлено: Среда, 12 Ноябрь, 2008 20:03 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2309
Откуда: Россия, Томск
Сергей Губанов писал(а):
Тут уместно было бы ещё упомянуть, что один тик не равен одной миллисекунде в точности, он чуть-чуть дольше.
Я проводил замеры (на компе АСУ ТП), и у меня получалось, что число тиков в сутках не постоянно, оно колеблется в пределах +-4 от расчётного. Возможно, что это как-то зависит от железа.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Большой проект на BlackBox
СообщениеДобавлено: Среда, 12 Ноябрь, 2008 20:24 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
А точнее - от контроллера прерываний конкретной аппаратной платформы. Ну и от ОС.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Большой проект на BlackBox
СообщениеДобавлено: Среда, 12 Ноябрь, 2008 21:34 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1381
Valery Solovey писал(а):
А точнее - от контроллера прерываний конкретной аппаратной платформы. Ну и от ОС.


Ну, исчо там ведь кварц стоит... И он температурно подвергается... :twisted:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Большой проект на BlackBox
СообщениеДобавлено: Четверг, 13 Ноябрь, 2008 00:37 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
А ещё, наверное, если операционная система будет под большой нагрузкой, то некоторую часть прерываний она может не успеть обработать и пропустить тик, не так ли?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Большой проект на BlackBox
СообщениеДобавлено: Четверг, 13 Ноябрь, 2008 07:22 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Владимир Лось писал(а):
Valery Solovey писал(а):
А точнее - от контроллера прерываний конкретной аппаратной платформы. Ну и от ОС.


Ну, исчо там ведь кварц стоит... И он температурно подвергается... :twisted:

Да ну, бросьте! У него погрешность частоты в ppm-ах измеряется...

upd/ Вообще, если считать, что в сутках 86400000 мс, а один тик = 1 мс, то +- 4 тика в сутки вполне может укладываться в погрешность кварцевого генератора...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Большой проект на BlackBox
СообщениеДобавлено: Четверг, 13 Ноябрь, 2008 09:07 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1199
Интересен метод измерения тика.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Большой проект на BlackBox
СообщениеДобавлено: Четверг, 13 Ноябрь, 2008 09:27 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1193
Откуда: Украина, Киев
А не пора-ли уж подумать о переходе с винды на что-то более адекватное, если есть необходимость в достаточно частом опросе того-же COM порта? :D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Большой проект на BlackBox
СообщениеДобавлено: Четверг, 13 Ноябрь, 2008 09:34 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2309
Откуда: Россия, Томск
Trurl писал(а):
Интересен метод измерения тика.
Сейчас я вспомнил, что ситуация ещё хуже, чем я выше написал.

Проблема в программе была такая: каждая запись в БД снабжается меткой даты-времени. Если время берётся из системных часов, то есть две проблемы: 1) переход на летнее время и обратно; 2) шаловливые руки пользователя, исправляющего системное время компьютера. Напомню, что во времена Win95/98 запретить пользователю изменить системное время было практически невозможно (двойной клик по часикам - и вперёд). Чтобы записи в БД шли со строго неубывающими метками времени, было принято решение брать системное время в момент запуска программы, а далее отсчитывать секунды тиками (тот самый GetTickCount) и хранить собственное "отмеренное" время.

Тогда-то я и узнал, что в Windows 98 в сутках вовсе не X=24*60*60*1000 тиков, а иной раз примерно на 4000 больше. Т.е. тиковое время за сутки убегает вперёд приблизительно на 4 секунды.

Метод измерения: программа раз в сутки перезапускалась, и при завершении работы выводила в журнал своё внутреннее время и системное время с точностью до секунды. Регулярно наблюдаемая разница > 1 секунды говорила о том, что пользователь тут ни при чём (тем более, что им говорили не трогать время, и что они были заинтересованы в корректной работе программы). Разница в 1 секунду понятна и легко объяснима, но в 4 секунды...

Если есть постоянно включенный компьютер, то можно написать простенькую программу, которая будет показывать тиковое время. Или ещё проще: поставить в автозапуск программу, которая запомнит системное время и соответствующее ему значение GetTickCount. Далее в любой момент времени можно взять текущие значения и сравнить с точкой отсчёта: сколько по системным часам, и сколько по тиковым.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Большой проект на BlackBox
СообщениеДобавлено: Четверг, 13 Ноябрь, 2008 09:39 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2309
Откуда: Россия, Томск
Ярослав Романченко писал(а):
А не пора-ли уж подумать о переходе с винды на что-то более адекватное, если есть необходимость в достаточно частом опросе того-же COM порта? :D
Ну, если надо будет только COM-порт опрашивать и больше ничего, то может и перейдём : )

У меня не было ещё задач, где был бы необходим опрос чаще 10 раз в секунду или с точным квантованием времени. Мы просто используем винду по назначению, а не как ОС реального времени.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Большой проект на BlackBox
СообщениеДобавлено: Четверг, 13 Ноябрь, 2008 10:34 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1193
Откуда: Украина, Киев
Александр Ильин писал(а):
У меня не было ещё задач, где был бы необходим опрос чаще 10 раз в секунду или с точным квантованием времени.
Но и точность тиков при таких больших периодах времени вобщем-то до-лампочки :)
Александр Ильин писал(а):
Ну, если надо будет только COM-порт опрашивать и больше ничего, то может и перейдём : )
Что, только COM-порт можно в компе опрашивать? :D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Большой проект на BlackBox
СообщениеДобавлено: Четверг, 13 Ноябрь, 2008 12:14 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1199
Александр Ильин писал(а):
Тогда-то я и узнал, что в Windows 98 в сутках вовсе не X=24*60*60*1000 тиков, а иной раз примерно на 4000 больше. Т.е. тиковое время за сутки убегает вперёд приблизительно на 4 секунды.

А сутки Вы по атомным часам отмеряли?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Большой проект на BlackBox
СообщениеДобавлено: Четверг, 13 Ноябрь, 2008 12:51 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2309
Откуда: Россия, Томск
Trurl писал(а):
А сутки Вы по атомным часам отмеряли?
Да, по атомным. Читайте пост внимательнее.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 98 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB