Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Альтернатива GetTickCount   Найти похожие ветки 

 
DVM ©   (2012-03-14 23:03) [40]


> antonn ©   (14.03.12 22:32) [38]


> для чего? сабж возвращает время прошедшее со старта системы,
>  а предложенное?

сабж может и возвращает, но сабж применяется для организации ожидания в паре с циклом и просыпаниями через определенные интервалы времени.

WaitableTimer позволяет выставить таймер с любым интервалом, хоть 100 лет. WaitForXXX позволяют ждать срабатывания таймера хоть вечно + параллельно ждать сколько угодно событий таких как завершение потока и т.д. Крутить циклы со всякими GetTickCount, Sleep и т.д. расточительно и не правильно.


 
antonn ©   (2012-03-14 23:24) [41]


> сабж может и возвращает, но сабж применяется для организации
> ожидания в паре с циклом и просыпаниями через определенные
> интервалы времени.

я понял свою ошибку - я не сказал сразу что сабж в уже готовом проекте применяется не только так, как сказано в цитате...
перегрузка функции была бы (D7) - перегрузил, а так пришлось бы сооружать то, что выше есть в этой теме.


 
Sha ©   (2012-03-14 23:35) [42]

> antonn ©   (14.03.12 23:24) [41]

во всех таких местах просто используй дворды для моментов времени,
а нужное время ожидания сравнивай с их разностью,
все будет работать.


 
antonn ©   (2012-03-15 00:19) [43]


> во всех таких местах просто используй дворды для моментов
> времени,
> а нужное время ожидания сравнивай с их разностью,
> все будет работать.

там и так все переменные втянутые в работу с сабжем в dword, мест много, после 49 дней разность будет немного не такая как ожидалось. Плюс используется результат GetTickCount, а не его разность (используется аналогично времени в unixtime). Вот потому и задавался вопросом как бы "перегрузить" GetTickCount чтобы возвращал в int64 (например) результат.


 
Sha ©   (2012-03-15 00:23) [44]

ничего не понимаю


 
antonn ©   (2012-03-15 00:27) [45]

GetTickCount использовался и как метка времени, в целочисленном формате с достаточной точностью (десятые секунды), не только в операциях сравнения "таймеров". И после 49 дней эта метка будет переполнена и начинаться заново.


 
Sha ©   (2012-03-15 00:29) [46]

И зачем нужно помнить старую метку 49-дневной тухлости?


 
antonn ©   (2012-03-15 00:32) [47]


> И зачем нужно помнить старую метку 49-дневной тухлости?

переформулируй
один раз вызвали GetTickCount на 49-й день, второй раз на 50-й, какая будет разница м/у метками времени?


 
Sha ©   (2012-03-15 00:35) [48]

1 день, разумеется
Какая разница, что хранится в метках, если разница правильная.

Пример - вокзальные часы.
Они "переполняются", но время перекура позволяют измерить.


 
antonn ©   (2012-03-15 00:45) [49]


> Они "переполняются", но время перекура позволяют измерить.

до тех пор пока разница не вычисляется путем отнимания значения первой метки от второй?


 
Sha ©   (2012-03-15 00:49) [50]

В нашем измерении разница всегда вычисляется путем вычитания старого замера из нового.


 
antonn ©   (2012-03-15 00:52) [51]

понятно.
жаль что я всегда натыкаюсь не на "ваше", и приходится наблюдать вычитание нового из старого: 25032704-4233600000 (50 дней минус 49 дней)


 
antonn ©   (2012-03-15 00:53) [52]

тьфу ты, из нового старое =)
пример с цифрами тот же


 
Германн ©   (2012-03-15 00:55) [53]


> до тех пор пока разница не вычисляется путем отнимания значения
> первой метки от второй?

До тех пор, пока вычитание выполняется бездумно. Если разница считается по крайней мере один раз каждые 49.7 суток никаких проблем быть не может.


 
antonn ©   (2012-03-15 00:59) [54]


> До тех пор, пока вычитание выполняется бездумно.

это очень важный и информативный ответ.


 
Sha ©   (2012-03-15 01:03) [55]

Во ты заморочил сам себе голову.
Старый замер - тот что был сделан до нового, их значения могут быть любыми.


procedure TForm1.Button1Click(Sender: TObject);
var
 dw1, dw2, dw: dword;
begin
 dw1:=25032704;     Memo1.Lines.Add(IntToStr(dw1));
 dw2:=4233600000;   Memo1.Lines.Add(IntToStr(dw2));
 dw:=dw1-dw2;       Memo1.Lines.Add(IntToStr(dw));
end;


Результат


25032704
4233600000
86400000


А в вашем измерении иначе?


 
antonn ©   (2012-03-15 01:07) [56]

у меня типы разные, с бОльшей "разрешающей способностью", пока до разницы дойдет


 
Sha ©   (2012-03-15 01:07) [57]

> antonn

В моем примере несколько неудачно выбраны имена переменных.
Ты конечно, понял, что замер dw1 сделан после замера dw2.


 
Sha ©   (2012-03-15 01:08) [58]

> у меня типы разные, с бОльшей "разрешающей способностью", пока до разницы дойдет

НАФИГА????


 
antonn ©   (2012-03-15 01:09) [59]

что "нафига"?


 
Германн ©   (2012-03-15 01:10) [60]


> antonn ©   (15.03.12 00:59) [54]
>
>
> > До тех пор, пока вычитание выполняется бездумно.
>
> это очень важный и информативный ответ.
>

Дык ведь уже дали туеву хучу примеров правильного вычитания! Последний пример в pasha_golub ©   (14.03.12 18:24) [35]. Дополнительная информация о частоте вычислений этой разности в моём ответе.

Какая ещё информативность тебе требуется?


 
Sha ©   (2012-03-15 01:10) [61]

НАФИГА ЭТО

типы разные, с бОльшей "разрешающей способностью"


 
antonn ©   (2012-03-15 01:11) [62]


> Какая ещё информативность тебе требуется?

Лично мне не нужны ответы в стиле "код должен быть продуман". Это и так все знают.
Ну может кому нибудь такие ответы нужны, потому не буду говорить тебе "не пиши их" :)


> Sha ©   (15.03.12 01:10) [61]
>
> НАФИГА ЭТО

sql


 
Германн ©   (2012-03-15 01:14) [63]


> antonn ©   (15.03.12 01:11) [62]
>
>
> > Какая ещё информативность тебе требуется?
>
> Лично мне не нужны ответы в стиле "код должен быть продуман".
>  Это и так все знают.

Типичный ответ троешника.
Ты автор вопроса?


 
Sha ©   (2012-03-15 01:17) [64]

> Германн ©   (15.03.12 01:10) [60]
> Дык ведь уже дали туеву хучу примеров правильного вычитания! Последний пример в pasha_golub ©   (14.03.12 18:24) [35].

Это как раз пример неправильного вычитания по двум причинам:
1. сильно смахивает на всеми любимый IncDay.
2. при переходе через 0 он ошибается на 1ms.

Правильное вычитание только одно: C=A-B, и нефиг городить огород.


 
antonn ©   (2012-03-15 01:18) [65]


> Sha ©  

изначально я искал возможность в готовом проекте "подменить" GetTickCount который бы выдавал int64. В пхп можно было перегрузить, и в своей функции сделать костыляку наподобии [35] (собственно там она и есть).
Т.к. временнЫе метки использовались в вычислениях "много-где" (именно по этому не подходил вариант с переделкой "таймеров", подгонов типов), тип для хранения метки везде int64, и только сам источник такой метки отдает dword.


 
Sha ©   (2012-03-15 01:19) [66]

> antonn ©   (15.03.12 01:11) [62]
> sql

не вижу связи одного с другим


 
Sha ©   (2012-03-15 01:20) [67]

> GetTickCount который бы выдавал int64

ну никак не пойму зачем


 
Германн ©   (2012-03-15 01:22) [68]


> Это как раз пример неправильного вычитания по двум причинам:
>
> 1. сильно смахивает на всеми любимый IncDay.
> 2. при переходе через 0 он ошибается на 1ms.

Это просто самый "ближний" пример, который я нашёл колесом мышки.
И что значит, что он "ошибается на 1ms"? С учётом того, что в топике проверка "прошли ли те 5 секунд, которые я задал".


 
Sha ©   (2012-03-15 01:24) [69]

> Германн ©   (15.03.12 01:22) [68]

Да пойми ты, это бред, ярко демонстрирующий,
что автор не в ладах с целочисленной арифметикой.


 
antonn ©   (2012-03-15 01:29) [70]


> ну никак не пойму зачем

если у меня будет завтра желание, если за сегодня никто не поймет и не попробует объяснить, и если ветку не закроют - завтра попытаюсь объяснить (хотя если из [65] не ясно - то даже не знаю есть ли смысл объяснять). А сейчас - спокойной ночи :)


 
Германн ©   (2012-03-15 01:29) [71]


> Sha ©   (15.03.12 01:24) [69]
>
> > Германн ©   (15.03.12 01:22) [68]
>
> Да пойми ты, это бред, ярко демонстрирующий,
> что автор не в ладах с целочисленной арифметикой.

Какого автора ты имеешь в виду? Если Пашу Голубева, то объясни чем автор не в ладах с целочисленной арифметикой?


 
Германн ©   (2012-03-15 01:33) [72]

Паша, извини. Похоже я переврал твою фамилию. :(


 
Sha ©   (2012-03-15 01:40) [73]

> Германн ©   (15.03.12 01:29) [71]

Ну вот тебе более понятный пример.
Есть A и B.
Интегер.  
Надо получить их разность.
Причем заранее известно, что она всегда точно равна A-B.
Ты бы стал писать для этого функцию?
Ты бы стал внутри нее проверять знаки переменных?
Ты бы заложил в нее ошибку, чтобы результат иногда отличался от правильного на 1?
Или просто написал бы C=A-B ?
В сабже все то же самое.


 
Германн ©   (2012-03-15 02:00) [74]


> Sha ©   (15.03.12 01:40) [73]
>
> > Германн ©   (15.03.12 01:29) [71]
>
> Ну вот тебе более понятный пример.
> Есть A и B.
> Интегер.  
> Надо получить их разность.
> Причем заранее известно, что она всегда точно равна A-B.
>
> Ты бы стал писать для этого функцию?

Если переменные типа Integer - не стал бы. Но GetTickCount возвращает DWORD.
Теперь понял, что ты имел в виду.
Но результат вычитания GetTickCount - Start возвращает Integer не глядя на то, что "GetTickCount возвращает DWORD"!


 
Sha ©   (2012-03-15 02:07) [75]

На интегер свет клином сошелся!
Религия запрещает выбирать другие типы!
Даешь программирование без чтения букваря!
Ворнинги не для писателей!


 
Германн ©   (2012-03-15 02:25) [76]


> Sha ©   (15.03.12 02:07) [75]
>
> На интегер свет клином сошелся!
> Религия запрещает выбирать другие типы!

Ты об чём вообще?
Спать!
Рекомендую спать всем, кто не может согласиться с тем, что ему лучше пойти спать, чтобы завтра со свежей головой участвовать на форумах. :)


 
Sha ©   (2012-03-15 02:30) [77]

Эх, жаль Юрий Зотов забросил свой культпросвет.
Арифметика была бы актуальной темой.


 
Германн ©   (2012-03-15 02:44) [78]


> Sha ©   (15.03.12 02:30) [77]
>
> Эх, жаль Юрий Зотов забросил свой культпросвет.
> Арифметика была бы актуальной темой.
>

Не ЮЗ забросил. И арифметика тут не не при чём.


 
Ega23 ©   (2012-03-15 03:07) [79]


> Ты об чём вообще?
> Спать!
> Рекомендую спать всем, кто не может согласиться с тем, что
> ему лучше пойти спать, чтобы завтра со свежей головой участвовать
> на форумах. :)



procedure TForm17.Button1Click(Sender: TObject);
var
 dw1, dw2: DWORD;
begin
 dw1 := $FFFFFFFF;
 dw2 := $00000001;
 Label1.Caption := IntToStr(Cardinal(dw2-dw1));
end;


dw1 - твой GetTickCount перед аптаймом.
dw2 - через 2 миллисекунды (как нетрудно догадаться).
Результат - то, что Sha уже чёрти-сколько постов пытается донести.


 
sniknik ©   (2012-03-15 08:18) [80]

> то, что Sha уже чёрти-сколько постов пытается донести.
он странно "доносит". я вон пытался сказать что тип важен, надо это учитывать, привел примеры, и на это - "нормальный программист ... " т.д. вместо того чтобы прямо написать. т.к. по факту 98% не понимают представления чисел в компе что такое переполнение, и как делается вычитание (когда то нас учили, это было через сложение... может сейчас уже не так).



Страницы: 1 2 3 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.64 MB
Время: 0.05 c
2-1328946359
Виктор77
2012-02-11 11:45
2013.03.22
Проверка подмены IP-адреса


15-1336631511
jacksotnik
2012-05-10 10:31
2013.03.22
Корректное сохранение файла


2-1340372027
LDV
2012-06-22 17:33
2013.03.22
frag&drop


15-1352276202
AV
2012-11-07 12:16
2013.03.22
Интересный девайс. Ручка с запоминанием написанного.


2-1332009127
pooh001
2012-03-17 22:32
2013.03.22
регистронезависимый запрос SQL (Absolute DB или Accuracer)