Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизАльтернатива 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;
Скачать: [xml.tar.bz2];
Память: 0.61 MB
Время: 0.092 c