Конференция "Начинающим" » Таймер с точность до долей секунды [D7, WinXP]
 
  • Interesting (08.02.18 22:40) [0]
    Нужно организовать запись лога в файл с данными таймера. Точность таймера должна быть до долей секунд (мс).
    К примеру так - 08.02.2018 22:39:55.100

    Подскажите как это правильно организовать.
  • dmk © (09.02.18 03:59) [1]
    TimeToStr
    DateToStr
  • han_malign © (09.02.18 14:37) [2]

    > Точность таймера должна быть до долей секунд (мс).

    - точность системных часов(включая GetTickCount()) - по умолчанию 1/64 секунды... Для более точного профилирования надо использовать QueryPerformanceCounter...
    https://msdn.microsoft.com/ru-ru/library/windows/desktop/dn553408(v=vs.85).aspx
  • format (09.02.18 20:56) [3]
    var
    Tm : _SYSTEMTIME;
    begin  GetLocalTime(Tm);
     with Tm do Caption := Format('%02d.%02d.%02d %02d:%02d:%02d.%03d',[wDay,wMonth,wYear,wHour,wMinute,wSecond,wMilliseconds]);
  • Германн © (10.02.18 01:52) [4]
    В многозадачной ОС лог с такой точностью времени записи события смысла не имеет.
  • Германн © (11.02.18 02:37) [5]
    А я ещё раз повторю вопрос - "Зачем нужно в лог записывать время с точностью до долей секунд"? Если ОС Windows не является системой реального времени? После ответа на сей вопрос можно подумать и предложить какой-то реальный вариант.
  • KilkennyCat © (11.02.18 13:55) [6]

    >  ОС Windows не является системой реального времени

    ни одна ос в такой детской постановке вопроса не является ртос.

    что же касается именно "виндос не ртос" - https://www.youtube.com/watch?v=A2irJ0bvVU0
  • Германн © (12.02.18 01:58) [7]

    > KilkennyCat ©   (11.02.18 13:55) [6]
    >
    >
    > >  ОС Windows не является системой реального времени
    >
    > ни одна ос в такой детской постановке вопроса не является
    > ртос.
    >
    > что же касается именно "виндос не ртос" - https://www.youtube.
    > com/watch?v=A2irJ0bvVU0

    А это уже не Windows, с которой работает ТС. И автору вопроса это не нужно.
  • Германн © (12.02.18 02:01) [8]

    > KilkennyCat ©   (11.02.18 13:55) [6]
    >
    >
    > >  ОС Windows не является системой реального времени
    >
    > ни одна ос в такой детской постановке вопроса не является
    > ртос.

    MSDOS уже забыл?
  • kilkennycat © (12.02.18 03:21) [9]

    > И автору вопроса это не нужно.

    Если автору это не нужно, то зачем вообще было упоминать о RTOS?
    То ртос, то не ртос...
    Автор указал доли секунд. Виндоус это может. О чем спорить?
  • Redmond (13.02.18 00:26) [10]
    > запись лога в файл с данными таймера. Точность таймера

    Какого такого "таймера" и какая "точность"?
    У вас выполняется код. И вам периодически надо вывести некое сообщение в лог.
    А сообщение должно начинаться с префикса [%DATE%, %TIME%]. Ну и чего? Делаете например как-то так и всё:

    const LogFormatSettings:
               TFormatSettings = (
                     DateSeparator: '-';
                     TimeSeparator: ':';
                     ShortDateFormat: 'yyyy/mm/dd';
                     LongDateFormat: 'yyyy/mm/dd';
                     ShortTimeFormat: 'hh:nn:ss.zzz';
                     LongTimeFormat: 'hh:nn:ss.zzz';
               );

    procedure TForm1.Button1Click(Sender: TObject);
    var LogDateTime: TDateTime; LogMessage: String;
    begin
    LogDateTime:=Now();
    LogMessage:='Test';
    ShowMessage(Format('[%s] %s', [DateTimeToStr(LogDateTime, LogFormatSettings), LogMessage]));
    end;
  • Германн © (13.02.18 01:40) [11]

    > kilkennycat ©   (12.02.18 03:21) [9]
    >
    >
    > > И автору вопроса это не нужно.
    >
    > Если автору это не нужно, то зачем вообще было упоминать
    > о RTOS?
    > То ртос, то не ртос...
    > Автор указал доли секунд. Виндоус это может. О чем спорить?
    >

    О том что Виндоус много чего может, но никому ничем не обязан.
    Сообщение WM_TIMER действительно будет помещено в очередь сообщений окна строго через заданную долю секунды. Но вот когда оно будет обработано окном - это вопрос!
  • KilkennyCat © (13.02.18 02:47) [12]

    > Виндоус много чего может, но никому ничем не обязан.

    Вообще-то именно обязан. Иначе программирования не было бы.
  • Германн © (13.02.18 03:26) [13]

    > KilkennyCat ©   (13.02.18 02:47) [12]
    >
    >
    > > Виндоус много чего может, но никому ничем не обязан.
    >
    > Вообще-то именно обязан. Иначе программирования не было
    > бы.
    >  

    По данной теме он обязан вовремя поместить сообщение в очередь сообщений окна. Но не более.
  • KilkennyCat © (13.02.18 04:36) [14]
    понятно. то есть, WM_TIMER - наше всё. несмотря на [2], на то что была речь про таймер, но не уточнялось какой, и даже не говорилось о  событийности, что как-бэ дает возможность мыслить широко, мы ограничим себя догмой самого простенького таймерка.
  • DayGaykin © (13.02.18 18:13) [15]

    > - точность системных часов(включая GetTickCount()) - по
    > умолчанию 1/64 секунды...

    Т.е. GetTickCount возвращает +/- 1/64 секунды?
  • Германн © (14.02.18 02:29) [16]
    Удалено модератором
  • han_malign © (15.02.18 18:08) [17]

    > Т.е. GetTickCount возвращает +/- 1/64 секунды?

    - зависит от минимального(в системе) значения параметра timeBeginPeriod(), и от настроек/версии ОС(на каком-то сервере попадались и честные 1мс).
    и не +/-, а (GetTickCount()-GetTickCount()) - либо 0, либо >= 10..17
    ссылку я уже приводил:
    ... If resolution of 10 to 16 milliseconds is sufficient, you can use GetTickCount64, QueryInterruptTime, QueryUnbiasedInterruptTime, KeQueryInterruptTime, or KeQueryUnbiasedInterruptTime to obtain time stamps that aren't synchronized to an external time reference. For UTC-synchronized time stamps, use GetSystemTimeAsFileTime or KeQuerySystemTime. If higher resolution is needed, you can use QueryInterruptTimePrecise, QueryUnbiasedInterruptTimePrecise, or KeQueryInterruptTimePrecise to obtain time stamps instead.
    там же - https://msdn.microsoft.com/ru-ru/library/windows/desktop/dn553408#AppendixA
  • Германн © (17.02.18 03:10) [18]
    Удалено модератором
  • PrnZ (31.05.18 01:13) [19]
    мультимедийный таймер юзать надо
  • ку ку (31.05.18 08:32) [20]
    если в логах должно быть время,
    а на иконке таймера нарисованы часики,
    то это еще не значит,
    что для логов нужен таймер.
    каким бы мультимедийным он ни был.
 
Конференция "Начинающим" » Таймер с точность до долей секунды [D7, WinXP]
Есть новые Нет новых   [118448   +36][b:0][p:0.001]