|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
TimeStamp из TDateTime
Нужен штамп с дискретностью 100uSec.
Сделал так, но выглядит удручающе. Полагаю, что есть более трезвый способ?.. Код:
function DateTimeToTimeStamp(DateTime:TDateTime):cardinal; begin result:= round(frac(DateTime)*1000000000); end; |
#2
|
|||
|
|||
Не понятно, что имеется в виду под "нужен".
Вообще, твой код в принципе не правильный. Т.к. в TDateTime в дробной части хранится время в виде части целого дня, т.е. 0.5 - это полдень. Тогда, что бы получить праильное время надо делать как-то так: Код:
result := frac(DateTime)*(24*60*60); // получили время в секундах result := result * 1000000; // теперь перевели в кол-во микросекунд |
#3
|
|||
|
|||
Цитата:
У оборудования к которому программу пытаюсь написать есть внутренний счётчик "TimeStamp", отсчитывающий время после старта с инкрементом по 0,1мс, поэтому мне нужно подогнать реальное время к его формату. Спасибо за подсказку. |
#4
|
|||
|
|||
Ну, тогда может лучше воспользоваться чем-то типа GetTickCount - кол-во, если не ошибаюсь, микросекунд с определенной даты (аналог UNIX Time).
|
#5
|
|||
|
|||
Оно в миллисекундах и завязано за запуск системы с обнулением через определённое время. Однажды пользовался ею, но забыл про её существование. Спасибо, на неё и переориентируюсь. К тому же, как показала практика, мне дискретность в микросекундах и не нужна - аппарат строчит CAN сообщения не чаще 2mS(самый быстрый фрэйм, который замечен и тот CF), а в основной массе 10-15mS, плюс аппаратный FIFO оказался очень вместительным.
|