Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

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

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

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


 
Anatoly Podgoretsky ©   (2012-03-15 08:23) [81]

> Германн  (15.03.2012 02:44:18)  [78]

Но она стала бы популярна


 
antonn ©   (2012-03-15 08:46) [82]


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

а с ним спорят, что ничего не получится при одних dword"ах? вроде бы все согласны


 
Sha ©   (2012-03-15 09:17) [83]

> sniknik ©   (15.03.12 08:18) [80]
> он странно "доносит".

Ну так донеси сам.
Только не надо заранее исходить из того,
что программист выбрал самые неподходящие типы
и поэтому формула в сабже неверна.

Она верна.
Только научи его выбирать тип. А он будет сопротивляться.
Попутно попробуй доказать ему, уже что имеющиеся у него решения -
это костыли и полукостыли. А он будет сопротивляться.
При этом попобуй не обидеть авторов полукостылей
и авторов советов, уводящих дискуссию в сторону.
А они будут обижаться.


 
han_malign   (2012-03-15 09:25) [84]


> я вон пытался сказать что тип важен

- я раз попал в эту засаду - начиная с BDS2006 - при комбинировании знакового и беззнакового - компилятор расширяет выражение до int64, а не ругается как раньше... (два дня убил, пока догадался warning-и в D7 посмотреть)

З.Ы. Кстати - с модулем 256 - насколько помню, засада еще круче - разница двух byte - нихрена не byte(в выражении), т.к всегда сначала к integer приводится.

Так что лучше - от греха - еще и явно приведение типа в выражении делать...


 
Sha ©   (2012-03-15 09:32) [85]

> sniknik ©   (15.03.12 08:18) [80]

Я предполагал, что у автора топика тип всех переменных dword и проблема в другом.
В подобном коде есть другие, более вероятные места для серьезных ошибок в логике.
Мне просто не верилось, что он не знаком с элементарными вещами,
но сегодня, похоже, они перешли в разряд высшей математики,
если требуют столь широкого обсуждения на нескольких форумах.
Куда катится мир.


 
Jeer ©   (2012-03-15 09:37) [86]


> Куда катится мир.


Он уже там.


 
Sha ©   (2012-03-15 09:39) [87]

> han_malign   (15.03.12 09:25) [84]

Все немного не так.
Для работы с целочисленными типами длиной меньше или точно 32 бит
32-битный компилятор использует 32-битную арифметику.
Она едина для всех знаковых и беззнаковых типов.
Знаковость числа или результата используется только в 3 случаях
1 при необходимости его расширения до большей длины
2 в операциях сравнения
3 при выводе функциями типа IntToStr


 
han_malign   (2012-03-15 09:40) [88]


> antonn ©

- если нужен абсолютный штамп времени - то нужно использовать соответствующие функции, например GetSystemTimeAsFileTime - возвращает то самое 64-битное целое число(с разрешением 100нс)...

А использование относительных локальных меток в глобальном ресурсе("sql"(с)...) - чревато независимо от разрядности.
Например GetTickCount(64 в том числе) - меняется от машины к машине и сбрасывается после перезагрузки...


 
han_malign   (2012-03-15 09:50) [89]


> Все немного не так.
> Для работы с целочисленными типами длиной меньше или точно
> 32 бит
> 32-битный компилятор использует 32-битную арифметику.
> Она едина для всех знаковых и беззнаковых типов.

- если бы я на эти грабли лично не напоролся, то не утверждал бы - в BDS - выражение (u32 <{+-} i32) - расширяется(молча) до 64-бит... С 32-битными одного типа(знаковости) - слава богам - все путем осталось...


 
Sha ©   (2012-03-15 09:54) [90]

> han_malign   (15.03.12 09:50) [89]

Здесь работает правило 1:
1 при необходимости его расширения до большей длины


 
sniknik ©   (2012-03-15 10:00) [91]

> Я предполагал, что у автора топика тип всех переменных dword и проблема в другом.
а я всегда предполагаю, что раз не показано, значит не знает про важность этой части (если она реально важна), и это значит там худшее из возможного.
т.е. не умение выделить из кода значимые части для показа = их не знание, а вовсе не "само собой разумеющееся, поэтому лишнее, ошибки там не возможны".


 
Anatoly Podgoretsky ©   (2012-03-15 10:02) [92]

> han_malign  (15.03.2012 09:50:29)  [89]

Причем тут SQL, там другие правила и не имеют отношения к Дельфи


 
Anatoly Podgoretsky ©   (2012-03-15 10:04) [93]

> Anatoly Podgoretsky  (15.03.2012 10:02:32)  [92]

Там ближе к Бейсику, с его "вариантами"


 
Андреевич   (2012-03-15 10:20) [94]


> han_malign   (15.03.12 09:40) [88]
>
> > antonn ©
>
> - если нужен абсолютный штамп времени - то нужно использовать
> соответствующие функции

зачем мне говорить что нужно? у меня есть то что есть.


> Например GetTickCount(64 в том числе) - меняется от машины
> к машине и сбрасывается после перезагрузки...

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


 
han_malign   (2012-03-15 10:54) [95]


> Там ближе к Бейсику, с его "вариантами"

- модульную арифметику там никто не отменял ((4294967296 + fresh - ancient) % 4294967296)...


> Здесь работает правило 1:

- гоню я короче, родной раздражающий "W1024 Combining signed and unsigned types - widened both operands" - там никуда не делся(проверил только что). У меня в граблях таки int64 затесался... (старею, маразм крепчает)

А вот с byte таки засада:
if( byte(byte(s[i]) - byte("0"))  > 9 )then exit;


 
Unknown user ©   (2012-03-15 11:09) [96]

Я как чувствовал, что топик нужно помещать в раздел прочее :)

Увлеклись вы ребята вычитанием на квантовом уровне. Еще немного и про искривление времени речь зайдет. Вы же наверняка знаете, что время вблизи массивных объектов течет медленнее? :)

Но ответа на мой второй вопрос так никто и не дал. Ну почти не дали...

Start := GetTickCount;
while (FReceivedData = nil) and (GetTickCount - Start < WaitTime) do
 Application.ProcessMessages;


Что плохого в этом коде? Приложение однопоточное. WaitTime - 5 секунд. Да, лишняя загрузка процессора. Но это всего на 5 сек.

Я часто использую такой подход, когда нужно в первичном потоке дождаться прихода какого-либо сообщения в очередь сообщений этого же потока. Либо завершить по таймауту, если не судьба.


 
Anatoly Podgoretsky ©   (2012-03-15 11:26) [97]

> Unknown user  (15.03.2012 11:09:36)  [96]

Чего плохого? Ну например использование процессора вместо радиатора


 
Sha ©   (2012-03-15 11:27) [98]

> han_malign   (15.03.12 10:54) [95]

Как вариант
 if dword(s[1])-dword("0")>9 then exit;


> Unknown user ©   (15.03.12 11:09) [96]

Ужас


 
Inovet ©   (2012-03-15 11:32) [99]

> [96] Unknown user ©   (15.03.12 11:09)
> Что плохого в этом коде?

Все приложения кушать хотят.


 
Unknown user ©   (2012-03-15 11:44) [100]

>Чего плохого? Ну например использование процессора вместо радиатора

Надо понимать больше недостатков нет?

>Все приложения кушать хотят.

Это забота ОС. Мое приложение не выполняется с realtime приоритетом и давно уже используется вытесняющая многозадачность.


 
Inovet ©   (2012-03-15 11:48) [101]

> [100] Unknown user ©   (15.03.12 11:44)
> Это забота ОС.

Вот будет твоё приложение жрать 100% времени, а тут ещё одному понадобится для расчёта, а не для просто так, но твоё 50% заберёт. Какое из них пользователь отправит в корзину?


 
Sha ©   (2012-03-15 11:51) [102]

> Unknown user ©   (15.03.12 11:44) [100]
> Надо понимать больше недостатков нет?

Может есть, может нет. Как и с любым другим.
Ты же про то, как пользуешься этим, молчишь.

Например, есть ли недостатки в операторе C:=A-B?
Тебе их все назвать?


 
Unknown user ©   (2012-03-15 11:53) [103]

А как насчет такого кода? Все так же или что-то поменялось?
   
while not Application.Terminated do
  Application.HandleMessage;


 
Sha ©   (2012-03-15 11:57) [104]

Я тут тоже кое-что пишу

 i:=-1;

Это правильно?


 
Unknown user ©   (2012-03-15 12:51) [105]

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


 
Sha ©   (2012-03-15 13:03) [106]

1. Ты спрашиваешь до или после того, как посмотрел закладку процессов в диспетчере задач?

2. В твоем случае извращения приведут только к запутыванию логики и, возможно, ошибкам.


 
Unknown user ©   (2012-03-15 15:48) [107]

>1. Ты спрашиваешь до или после того, как посмотрел закладку процессов в диспетчере задач?

Я посмотрел на реализацию Application.HandleMessage, там используется функция WaitMessage. Поэтому такой код

Start := GetTickCount;
while (FReceivedData = nil) and (GetTickCount - Start < WaitTime) do
Application.HandleMessage;


не должен вызывать лишней загрузки процессора. Значит в таком виде его можно применять? (сообщения в очередь приходят регулярно)

to Sha

Насчет неполного фрагмента кода. Остальная часть не суть важно. Там всего лишь обработка сообщения PIPE message и создание объекта FReceivedData. Все в первичном потоке.

>2. В твоем случае извращения приведут только к запутыванию логики и, возможно, ошибкам.

Так вот я и пытаюсь выяснить что еще не так. Где именно извращения. Почему такой код считается неграмотным? Запутывание логики наоборот происходит при асинхронном способе взаимодействия. Тут же нет ничего лишнего. Минимально достаточный код, выполняющий возложенные на него функции.

Жду критики профессионалов.


 
Inovet ©   (2012-03-15 16:09) [108]

> [107] Unknown user ©   (15.03.12 15:48)

Потому что непонятно, что ты делаешь в непоказанном коде и потому, что есть объекты снхронизации, как раз чтобы с ними "забота ОС" была.


 
Unknown user ©   (2012-03-15 16:20) [109]

Ну и что должны делать объекты синхронизации в однопоточном приложении?


 
sniknik ©   (2012-03-15 16:22) [110]

> Почему такой код считается неграмотным?
это попытка сохранить стиль линейного программирования в событийно ориентированной среде...

ну типа, по аналогии, сохранение "стиля бейсика" с нумерацией строк/goto в при написании программ в дельфи. ну вот что плохого? если работает... но на работу не возьмут, если такой код, весь пронизанный goto, на собеседовании покажешь.


 
pasha_golub ©   (2012-03-15 20:19) [111]


> Sha ©   (14.03.12 19:13) [37]
> Привет братьям по разуму!
> Веселье продолжается. Пил то же бухло?


Разработчики Indy пили, да. А я решил не мучаться и поверил. :)


 
pasha_golub ©   (2012-03-15 20:27) [112]

Чем для меня примечательна данная ветка, что впервые увидел "воинствующих мастеров"! Новая веха, однозначно! :)



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

Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.66 MB
Время: 0.061 c
2-1329472416
AlxAY
2012-02-17 13:53
2013.03.22
Как в отдельном потоке вызвать функцию из основного без зависаний


15-1333744203
Юрий
2012-04-07 00:30
2013.03.22
С днем рождения ! 7 апреля 2012 суббота


15-1351165516
картман
2012-10-25 15:45
2013.03.22
анализы крови


15-1340260883
TUser
2012-06-21 10:41
2013.03.22
Две новости рядом


2-1335432052
Pcrepair
2012-04-26 13:20
2013.03.22
Многопользовательский режим работы проги





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский