OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 22 Август, 2019 19:44

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




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

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Александр Ильин писал(а):
Чтобы записи в БД шли со строго неубывающими метками времени, было принято решение брать системное время в момент запуска программы, а далее отсчитывать секунды тиками (тот самый GetTickCount) и хранить собственное "отмеренное" время.


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


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

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2309
Откуда: Россия, Томск
Vlad писал(а):
А почему, собственно, не писать в базу системное время в момент запуска программы, а потом туда же тики (плюс, может быть, и реальное системное время)?
Это бы сильно усложнило как структуру БД, так и обработку. А дополнительное системное время вообще не понятно, зачем нужно, и как обрабатывать и отображать (на графиках) возможные расхождения. По оси абсцисс у нас время, а по оси ординат - значения технологических параметров. Зачем нам несколько осей абсцисс? Нам нужно, чтобы графики ползли строго направо, без всяких скачков влево, а скачок вправо всегда бы означал отсутствие связи либо перерыв в записи.

БД получилась очень "мобильная": один файл = одни сутки. Легко копировать и архивировать. Заводить какую-то дополнительную таблицу с информацией о "путешествиях во времени"... Она же ничего не добавляет к информации о прошедших технологических процессах (главная задача БД - хранить именно эту информацию). Выводить в БД какие-то детали реализации программы - значит усложнять вспомогательный инструментарий, который потом будет эти данные обрабатывать. (Такие узкоспециализированные инструменты тоже были написаны - например, экспорт в CSV.)

Вот такие соображения.


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

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Александр Ильин писал(а):
А дополнительное системное время вообще не понятно, зачем нужно, и как обрабатывать и отображать (на графиках) возможные расхождения.


Я сказал "может быть" :) А если надо просто построить график - то как раз достаточно просто тиков ;) Тем более, что время на графике вы скорее всего захотите увидеть относительное. А вот если все-таки хочется на графике видеть абсолютное системное время, то лучше таки писать в базу реальное время и его же показывать (а строить график по тикам).
Против "своего" времени в базе у меня только одно возражение - оно может сбить с толку при "разборе полета". Например, если все упало в 12:00, а последняя запись в базе датирована 12:05, то это заставит крепко призадуматься тех, кто не в курсе такой "особенности".


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

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1200
Александр Ильин писал(а):
Да, по атомным. Читайте пост внимательнее.

А почему Вы считаете системное время более точным? Оно управляется теми же тиками.
Другое дело, что система может периодически синхронизировать системное время с сервером времени или с RTC.


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

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

А Вы, что же, подключили к компьютеру атомные часы?


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

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


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

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2309
Откуда: Россия, Томск
Vlad писал(а):
Я сказал "может быть" :)
Я понял, и даже попробовал продумать этот вариант.
Vlad писал(а):
А если надо просто построить график - то как раз достаточно просто тиков ;) Тем более, что время на графике вы скорее всего захотите увидеть относительное. А вот если все-таки хочется на графике видеть абсолютное системное время, то лучше таки писать в базу реальное время и его же показывать (а строить график по тикам).
Вот и получается сложность - пишем по времени, отображаем по тикам, а на оси абсцисс вообще непонятно что. На оси абсцисс интересует именно абсолютное время - в какое время ёмкость заполнилась, и почему задержали отгрузку, например, или какие показатели давления были во время нештатной ситуации в 15:43 и т.п.

А если компьютер несколько раз за сутки перезапускали и счётчик GetTickCount, соответственно, сбрасывался? Значит, нужна дополнительная таблица, в которую при каждом запуске программы записывается текущее время и тик начала отсчёта, этому времени соответствующий. При моей реализации просто глядя в таблицу с данными, и делая к ней простейшие SQL-запросы можно взять, скажем, данные за нужный интервал времени. В вашем варианте для этой типичной задачи потребуется гораздо более сложный алгоритм, работающий с двумя таблицами - и я не уверен, что на SQL его можно написать. А задача эта выполняется всякий раз, когда пользователь хочет посмотреть чуть более старые данные.

Всё-таки я не представляю себе. Вот пользователь, скажем, в 15:55 поправил системное время на 5 минут назад. И стало 15:50. Запись производится кадждые 5 секунд. Стало быть, в БД у нас появится по два значения для каждого графика в интервале с 15:50 до 15:55. По тикам всё замечательно - тики увеличиваются, но как отобразить это на графиках, где ось абсцисс - время? Сделать на оси абсцисс два интервала 15:50-15:55? Или сделать на графиках временной зигзаг?

Задача интересная. Тут я впервые столкнулся с тем, что системное время - это тоже вид ресурса, который нужно захватывать.


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

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

Тогда в чём проблема-то с +-4 секундами в сутки? Это вполне может быть Вашей погрешностью измерения продолжительности суток...


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

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

Тут у Вас единственным реальным решением может быть только внешнее устройство (часы реального времени), к которому пользователь не имеет доступа...


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

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2309
Откуда: Россия, Томск
Geniepro писал(а):
Александр Ильин писал(а):
Шутка заключается в том, что для обсуждаемой в посте проблемы точность измерения суток не важна.
Тогда в чём проблема-то с +-4 секундами в сутки? Это вполне может быть Вашей погрешностью измерения продолжительности суток...
Ещё раз повторяю - точность измерения длины суток не имеет никакого значения.

Берём в произвольный момент времени С1 := GetTickCount и T1 := текущее время по системным часам. Приблизительно через сутки, а можно и через двое или трое, снова берём С2 := GetTickCount и T2 := текущее время по системным часам.

Вычисляем прошедшее количество секунд между T1 и T2: deltaT := секунды(T2 - T1).
Вычисляем прошедшее количество секунд между C1 и C2: deltaC := (C2 - C1) DIV 1000.
Видим, что deltaC = deltaT + 4.

Какая разница, с какой точностью взяты сутки? Важен сам факт наличия погрешности и её приблизительный порядок. Если кому-то интересно точное значение погрешности - пусть измеряет. Я просто говорю, что за сутки около 4 секунд может набегАть.

Если бы разница была в пределах одной секунды, это можно было бы списать на погрешность DIV 1000. Но 4 секунды - это явное свидетельство расхождения системного и тикового времён. В пределах одного компьютера и одного сеанса работы. При чём тут атомные или настенные часы?

Неужели я так плохо объясняю?


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

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


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

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Александр Ильин писал(а):
Неужели я так плохо объясняю?
Вот сецчас Вы понятно объяснили, а до этого Вы, видимо, считали нас телепатами...


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

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1200
Александр Ильин писал(а):
Какая разница, с какой точностью взяты сутки? Важен сам факт наличия погрешности и её приблизительный порядок. Если кому-то интересно точное значение погрешности - пусть измеряет. Я просто говорю, что за сутки около 4 секунд может набегАть.


Просто термин "погрешность" выбран неудачно. ;)


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

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2309
Откуда: Россия, Томск
Geniepro писал(а):
Александр Ильин писал(а):
Неужели я так плохо объясняю?
Вот сецчас Вы понятно объяснили, а до этого Вы, видимо, считали нас телепатами...
Процитирую сам себя (из одного-единственного поста) с выделением жирным
Александр Ильин писал(а):
...Чтобы записи в БД шли со строго неубывающими метками времени, было принято решение брать системное время в момент запуска программы, а далее отсчитывать секунды тиками (тот самый GetTickCount) и хранить собственное "отмеренное" время...
Метод измерения: программа раз в сутки перезапускалась, и при завершении работы выводила в журнал своё внутреннее время и системное время с точностью до секунды. Регулярно наблюдаемая разница > 1 секунды говорила о том, что пользователь тут ни при чём...
Если есть постоянно включенный компьютер, то можно написать простенькую программу, которая будет показывать тиковое время. Или ещё проще: поставить в автозапуск программу, которая запомнит системное время и соответствующее ему значение GetTickCount. Далее в любой момент времени можно взять текущие значения и сравнить с точкой отсчёта: сколько по системным часам, и сколько по тиковым.
Sapienti sat.


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

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1200
Давайте разбираться. Под "системным временем" будем подразумевать то, что возвращает GetSystemTime. При запуске Windows считывает из CMOS показания "Real Time Clock" и устанавливает системное время. Далее, каждые 55 милисекунд обновляется как системное время, так и "счетчик тиков". Пока никто не вмешивается, имеет место полная синхронность. Конечно, любая программа может сделать SetSystemTime и все, привет.

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


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

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Александр Ильин писал(а):
А если компьютер несколько раз за сутки перезапускали и счётчик GetTickCount, соответственно, сбрасывался?


А если его перезпускали и меняли время? ;) Можно писать в базу не абсолютные тики, а относительно предыдущего отсчета. Тогда будет одна таблица и с перезагрузками все хорошо.

Александр Ильин писал(а):
При моей реализации просто глядя в таблицу с данными, и делая к ней простейшие SQL-запросы можно взять, скажем, данные за нужный интервал времени.


Так и в случае "тики + время" - это тоже простейший SQL. Просто в случае "неправильного" интервала вернется более одного отсчета на одно абсолютное время. Что на самом деле будет более честно. Т.е., если часы были переведены в 3 часа на час назад и пользователь делает запрос "с 2 до 3", то ему вернется интервал размером в 2 часа, в котором отсчеты будут идти с 2 до 3, а потом опять с 2 до 3. График будет построен по тикам, поэтому с ним все просто. Со временной шкалой тоже ничего сложного нет. Выбираем масштаб, например 5 минут. Идем последовательно по данным полученного интервала и ищем отсчет с ожидаемым абсолютным временем - "текущее время + 5 минут". Если время очередного отсчета отличается от "текущего времени" более чем на 5 минут - корректируем "текущее время".


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

Зарегистрирован: Вторник, 13 Март, 2007 06:15
Сообщения: 93
Откуда: Кемерово, КузГТУ
Возник ещё один вопрос. Дело в том, что мне нужна поддержка реального времени настолько, насколько только возможно её реализовать в Windows. А потому, для создания потоков хочу попробовать WinAPI. Внимание, вопрос: как с такими потоками будет работать сборщик мусора? Справится ли?


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

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9132
Откуда: Россия, Орёл
Нет, с потоками Windows ББ не дружит.

Но два года назад я делал спец. ядро, которое это обеспечивает (Active BlackBox). Оно как бы не поддерживается (потому что не нравится мне идейно, по модели параллелизма), но полностью работоспособно. Поглядите его на OberonCore и пишите мне в личку - всё обсудим :)


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

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


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

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


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

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