![]() |
|
|
![]()
|
|
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
Вот подскажите, в чем дело. Написал в событии OnTimer компонента TTimer вот это:
Объясните, почему всегда выводится сообщение "0"! |
|||
|
||||
| Бегемот |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 219 Регистрация: 26.1.2005 Где: На границе Европы и Азии Репутация: 1 Всего: 3 |
sim7, ну так потому что функцией Now() в x и y возвращается одно значение! Вот при вычитании ноль и получается!
|
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 7 Всего: 67 |
-------------------- СУВ, Partizan. |
|||
|
||||
| Vyacheslav |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Бегемот Partizan - Вам двойка по основам С++. Обязательно ноль будет выдан только при первом вызове.
А по существу дела, Now возвращает TDateTime. Вы его переводите в int c помощью неявного вызова оператора
который возращает не тики и милисекунды, как Вы наверное думали, а
Так что, если Вы дадите программе поработает денек, то вы сможете в конце концов вместо нуля получить единицу Если результат нужен в милисекундах, то нужно проделать нечто вроде этого
-------------------- С уважением, Вячеслав Ермолаев |
||||||
|
|||||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 7 Всего: 67 |
Vyacheslav Просто мне не встречалась ещё функция Now() и я подумал, что Now() это функция, которую определил он сам....думаю и Бегемот так же подумал....
теперь буду знать что это за функция такая Now()... з.ы. не знал что функция now - это одна из основ... -------------------- СУВ, Partizan. |
|||
|
||||
| Vyacheslav |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Следующий раз придется объяснять досконально. Похоже 2 - это завышенная оценка
Здесь основа из основ не Now, a static. А по сему в
x == y только при первом проходе. При последующих проходах x сохраняет первоначальное значение, а y каждый раз инициализируется заново и логично предположить, что это новое значение может уже не равно x. И вопрос был
Подчеркиваю "всегда", а не при первом проходе. Кстати одна только конструкция типа
могла навести на мысль, что Now при каждом вызове должен выдавать разные значение,даже не зная для чего эта функция предназначена. -------------------- С уважением, Вячеслав Ермолаев |
||||||
|
|||||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 7 Всего: 67 |
не надо меня учить....я знаю чем характеризуется static и зачем он нужен...
я же вам объяснил что я подумал что это его функция, и предположил, что она выполняет одни и те же действия с одними и теми же данными(исходя из пустого списка с параметрами...) и возвращает одно и то же значение( исходя из того, что вызывается 2 раза подряд одна и та же конструкция!!!(ЕЩЁ РАЗ ПОВТОРЯЮ Я НЕ ЗНАЛ ЧТО NOW возвращает прик каждом выхове разное значение или по крайней мере должна возвращать...))... дабы вы меня вновь не поняли привратно, привожу пример:
res всегда будет равно 0 вне зависимости от того X объявлен статической переменной или нет... вся ошибка была всего навсего в незнании функции Now()...ещё раз повторяю... з.ы. я ж не телепат чтобы сразу знать что делает функция сразу как только я увидел её использование в программе... если бы он указал явно чем занимается функция Now(), получил бы совсем другие ответы Это сообщение отредактировал(а) Partizan - 25.1.2006, 17:14 -------------------- СУВ, Partizan. |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Совершенно бесмысленных примеров можно привести сколько угодно, так же как совершенно бесмысленных ответов. А отвечая на вопросы нужно исходить, как мне кажется, хотя бы из приципа разумности, тем более что применения static в такой ситуации говорит само за себя, а не накручивать себе счетчик ответами
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| Бегемот |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 219 Регистрация: 26.1.2005 Где: На границе Европы и Азии Репутация: 1 Всего: 3 |
Да, функция Now() после всех преобразований возвращает количество дней, но возвращает-то она не целое число, а нечто такое:
x = 38741.8228037 y = 38741.8228157 А так как Now() возвращает эти числа в переменные типа int, мы получаем целое число 38741 как в x, так и в y! Ну и при их вычитании получаем ноль! Ну, если, конечно, сутки не будем ждать!
p.s: Vyacheslav, а мОнА хотя бы троечку с минусом? |
|||
|
||||
| Vyacheslav |
|
||||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Ладно уговорил
Все таки Now возвращает TDataTime
А для TDataTime определены операторы преобразования
Который возращает число, целая часть которого количество дней, дробная часть дня и оператор
И если имеется код
или
эти операторы вызываются неявно -------------------- С уважением, Вячеслав Ермолаев |
||||||||||
|
|||||||||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
Почитал-почитал, так и не понял, почему же в данном случае не срабатывает static.
|
|||
|
||||
| Бегемот |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 219 Регистрация: 26.1.2005 Где: На границе Европы и Азии Репутация: 1 Всего: 3 |
sim7, срабатывает, срабатывает static!
Вот тебе результаты нескольких вызовов обработчика события OnTimer с интервалом в одну секунду! x = 38742.9015837 y = 38742.9015837 res = 0.0000007 x = 38742.9015837 y = 38742.9015957 res = 0.0000127 x = 38742.9015837 y = 38742.9016077 res = 0.0000237 x = 38742.9015837 y = 38742.9016187 res = 0.0000357 x = 38742.9015837 y = 38742.9016307 res = 0.0000467 x = 38742.9015837 y = 38742.9016417 res = 0.0000587 .....а через сутки res гордо примет значение единицы! Как видишь, static выкладывается по полной программе, упорно храня в x то значение, которое он(x) получил при первом вызове обработчика! При этом y изменяется (увеличивается) при каждом вызове обработчика! Vyacheslav!
Смотрю по отладчику! Невижу ничего подобного! Почему?! |
||||
|
|||||
| Vyacheslav |
|
||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
правда непонятнно, почему у тебя res = 0.0000007. Добавлено @ 10:37
Ну как еще объяснить? Причем тут static, с ним то все в порядке. По своему алгоритму Вы дни считаете. Ну не понимаете, наберите просто этот код и посмотрите
Или хотя бы, этот
-------------------- С уважением, Вячеслав Ермолаев |
||||||||
|
|||||||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 7 Всего: 67 |
Vyacheslav согласен, что логичнее было спросить сначала чем занимается функция Now()... моя ошибка...
-------------------- СУВ, Partizan. |
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
Ах, дни! Вона что! То есть у меня сравниваются-то дни? То есть вот почему после суток значение 1 будет... (я не проверял, конечно, верю на слово
|
|||
|
||||
| Бегемот |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 219 Регистрация: 26.1.2005 Где: На границе Европы и Азии Репутация: 1 Всего: 3 |
Упс!
Vyacheslav...видимо вчера я смотрел мимо монитора НО!
Это то, что я скопировал из текстового файла, в который сохранял результаты при каждом вызове обработчика! Честно говоря, для меня остаётся непонятным почему в файл было записанно такое значение переменной res! |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |