Помогите с Delay() |
Помогите с Delay() |
godd |
2.10.2004 23:15
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 40 Пол: Мужской Репутация: 0 |
Как настроить Delay чтобы на всех машинах задержка была одинакова?
А то получатеся под моим Duron850 - усе оки, под Celeron2000 - слишком быстро, под P1-не наю скока - слишком медленно? Через какие функции мона определить частоту или хотя бы тип процессора? Или на Pascal'e никак? |
GoodWind |
3.10.2004 4:59
Сообщение
#2
|
Автооответчик Группа: Модераторы Сообщений: 1 188 Пол: Мужской Реальное имя: Александр Репутация: 16 |
была такая тема, воспользуйся поиском
-------------------- Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
|
Altair |
3.10.2004 7:47
Сообщение
#3
|
Ищущий истину Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: 45 |
http://forum.pascalnet.ru/index.php?showtopic=1879
Цитата А почему задержки, которые задаются процедурой Delay(),на разных машинах разные? Цитата CRT криво написан. Вот вам другая процедура: procedure Stop(Wait:LongInt); assembler; Все это из нашего FAQ'a. Загляните туда. Ссылку я дал. GoodWind, еще раз скажешь "воспользуйся поиском", накажу! -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
godd |
3.10.2004 9:41
Сообщение
#4
|
Новичок Группа: Пользователи Сообщений: 40 Пол: Мужской Репутация: 0 |
Oleg_Z
а может имеет смысл в Код procedure Stop(Wait:LongInt); assembler; asm mov ah,86h mov dx,word ptr Wait mov cx,word ptr Wait+2 int 15h end; вместо Код Wait:LongInt сделать так Код Wait:Word |
SKVOZNJAK |
3.10.2004 12:57
Сообщение
#5
|
Профи Группа: Пользователи Сообщений: 930 Пол: Мужской Репутация: 11 |
Нет смысла в самопальных ассемблерных процедурах - если только в качестве дополнения. Всё равно в стандартных модулях используется CRT, вот тут-то глюк и вырвется на свободу Лучше пропатченного модуля ничего не найти. В разделе исходников лежит дистрибутив Борланд Паскаля. Урезанный правда, но без глюков.
Нужно этот вопрос поместить в ВАЖНЫЕ ТЕМЫ. |
Altair |
4.10.2004 5:37
Сообщение
#6
|
Ищущий истину Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Цитата на пахает Не может быть. Я все тестирую, прежде чем в FAQ выкладывать! Цитата вместо Код Wait:LongInt сделать так Код Wait:Word А если задержку надо больше 65536 мс? -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
godd |
4.10.2004 11:04
Сообщение
#7
|
Новичок Группа: Пользователи Сообщений: 40 Пол: Мужской Репутация: 0 |
Oleg_Z
я в ассембе хоть и мало шарю, но mov dx, word ptr Wait наверное что-то значит [там вроде есть такое слово как word, и о чем тогда разговор?] |
godd |
4.10.2004 11:11
Сообщение
#8
|
Новичок Группа: Пользователи Сообщений: 40 Пол: Мужской Репутация: 0 |
Oleg_Z
А если и больше 65535мс - то можно функцию несколько раз подряд вызвать (типа сперва 65535, а потом сколько останется). Задержка в 65535 означает 65,536 секунд - а этого вроде ппредостаточно Longint - 4байта, а word - 2 байта + время велечина ПОЛОЖИТЕЛЬНАЯ |
Altair |
4.10.2004 17:33
Сообщение
#9
|
Ищущий истину Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Цитата там вроде есть такое слово как word Это не то, о чем вы подумали. Цитата о чем тогда разговор?] Да вроде все решили. Вы правы вобщем. Нет смысла использовать 4 байта, раз можно вызвать 2 раза процедуру. Полностью согласен с вами в этом вопросе. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
FreeMan |
4.10.2004 17:39
Сообщение
#10
|
- Группа: Пользователи Сообщений: 480 Пол: Мужской Репутация: 4 |
Если нужна задержка не меньше 55мс можно читать по адресу $40:$6c, там значение изменяется 18 раз в секунду.
-------------------- бб
|
godd |
4.10.2004 22:35
Сообщение
#11
|
Новичок Группа: Пользователи Сообщений: 40 Пол: Мужской Репутация: 0 |
Oleg_Z
да нет, мы ассм немного изучали, а в mov dx,word ptr Wait word - это вроде слово, величина слова составляет 2 байта, если я не ошибаюсь (просто интересно) |
Altair |
4.10.2004 22:54
Сообщение
#12
|
Ищущий истину Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: 45 |
DW или WORD
Эта директива определяет эл-т данных длинной 2 байта (слово) асм преобразует числовые коснтантывдоичный код и сохраняет в последовательности с переставленными байтами! Во че я знаю! -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
P@sh@ |
7.10.2004 10:36
Сообщение
#13
|
Бывалый Группа: Пользователи Сообщений: 180 Пол: Мужской Репутация: 2 |
строчка mov dx,word ptr Wait
означает, что в dx загрузится слово (word, 2 байта) с адреса wait, соответственно, в cx загрузится слово с адреса wait+2 (mov cx,word ptr Wait+2), т.е. следующие два байта... функция 86h прерывания 15h видимо требует в качестве параметра именно 32-битное число в регистрах cx:dx... таким образом, если описать параметр wait как word, получится фигня: либо в cx загрузится хрен знает что, либо (если убрать загрузку в cx) его значение останется неопределенным (хотя можно обнулить просто) PS: и вообще, надо параметр в процедуре объявлять как var, иначе он будет передаваться в регистрах (простое число ведь) и фиг знает, как паскаль подсунет его ассемблеру в виде указателя - ptr Wait PS2: и вообще, если задержка - 32-битное число, то вряд ли она в миллисекундах, скорее уж в микросекундах |
godd |
7.10.2004 14:00
Сообщение
#14
|
Новичок Группа: Пользователи Сообщений: 40 Пол: Мужской Репутация: 0 |
mov dx,word ptr Wait если Wait - LongInt (4байта), но грузим то мы 2байта. что тогда? |
P@sh@ |
11.10.2004 12:05
Сообщение
#15
|
Бывалый Группа: Пользователи Сообщений: 180 Пол: Мужской Репутация: 2 |
то есть?
|
godd |
11.10.2004 20:21
Сообщение
#16
|
Новичок Группа: Пользователи Сообщений: 40 Пол: Мужской Репутация: 0 |
вроде понял.
сперва 2байта из 4ех грузим в dx (т.е. половину от LongInt) потом 2байта из тех же 4ех грузим в cx (вторую половину от LongInt) Все так или нет? если нет - то как? если так - вопрос отпадает. заранее пасиба |
GLuk |
22.11.2004 0:27
Сообщение
#17
|
Профи Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: 0 |
Цитата(FreeMan @ 4.10.04 14:39) Если нужна задержка не меньше 55мс можно читать по адресу $40:$6c, там значение изменяется 18 раз в секунду. Изменяется, дык как только быть с 00:00 pm. Теория хороша только на практике... |
Текстовая версия | 22.09.2024 5:52 |