Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Эмуляторы отечественных компьютеров (http://zx-pk.ru/forumdisplay.php?f=61)
-   -   Эмулятор УКНЦ - EmuStudio (http://zx-pk.ru/showthread.php?t=18027)

Titus 3rd January 2013 01:57

Quote:

Originally Posted by Patron (Post 564084)
Здесь есть небольшая засада, заключающаяся в том, что некоторые клавиатуры ( или это Windows так прикалывается ) не могут отрабатывать код переключения лампочек слишком часто (у меня - не чаще одного раза в 90 мс). Чтобы промежуток между последовательными переключениями лампочек соблюдался - функции переключения лампочек (в модульном API) только ставят их флаги, а специальная функция, вызываемая 60 раз в секунду - приводит лампочки в соответствие с флагами, учитывая время последнего переключения последней лампочки.

Если че, 60 раз в секунду - это раз в 16мс) 16мс < 90мс )

Patron 3rd January 2013 02:22

Quote:

Originally Posted by Titus (Post 564134)
Если че, 60 раз в секунду - это раз в 16мс) 16мс < 90мс )

Это чтобы первого переключения долго не ждать. Для каждой лампочки запоминается время последнего переключения, поэтому то, что это время проверяется 60 раз в секунду - только повышает точность и быстродействие :)

---------- Post added at 00:22 ---------- Previous post was at 00:19 ----------

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

Titus 3rd January 2013 02:26

Quote:

Originally Posted by Patron (Post 564138)
Для последовательных переключений разных лампочек - рекомендованная по результатам тестов задержка - 30 мс, для той же лампочки - 90 мс.

А что делать, если найдется клавиатура или виндовс с еще более медленной реакцией? Глюканет?
У меня будет корректно работать)

Patron 3rd January 2013 02:48

Quote:

Originally Posted by Titus (Post 564141)
У меня будет корректно работать)

Сразу видно человека, которому хочется поделиться своим открытием :)
Как же избежать возможных проблем при переключениях лампочек ?

Titus 3rd January 2013 03:03

Quote:

Originally Posted by Patron (Post 564144)
Сразу видно человека, которому хочется поделиться своим открытием :)
Как же избежать возможных проблем при переключениях лампочек ?

Мне не жалко, если интересует, поделюсь)

Titus 3rd January 2013 03:10

1 Attachment(s)
Вот:

Patron 3rd January 2013 14:29

Похоже, я понял, почему мы не вполне понимаем друг друга в вопросе управления лампочками. Дело в том, что алгоритм взаимодействия драйвера с дисками накладывает свои ограничения на возможные состояния лампочек. Я же говорю про общий случай.

В общем же случае регулярно бывает такое:

1. Все три лампочки горят.
2. Пользователь закрывает эмулятор и все лампочки нужно выключить.

У меня все лампочки в такой ситуации всегда выключаются только в том случае, когда между отправками виртуальных нажатий для выключения каждой лампочки проходит не меньше 30 мс.

Иногда бывает и такое:

1. Все три лампочки только что ( меньше 10 мс назад ) включились.
2. Пользователь закрывает эмулятор и все лампочки нужно выключить.

У меня все лампочки в такой ситуации всегда выключаются только в случае, если между отправками виртуальных нажатий для выключения каждой лампочки проходит не меньше 90 мс с того момента, когда эта лампочка была включена.

Titus 3rd January 2013 14:41

Quote:

Originally Posted by Patron (Post 564193)
1. Все три лампочки только что ( меньше 10 мс назад ) включились.
2. Пользователь закрывает эмулятор и все лампочки нужно выключить.

У меня все лампочки в такой ситуации всегда выключаются только в случае, если между отправками виртуальных нажатий для выключения каждой лампочки проходит не меньше 90 мс с того момента, когда эта лампочка была включена.

А какая тут проблема?

1. Виртуально нажимаются и отпускаются три клавиши (для включения трех лампочек). Т.е. посланы 6 сообщений для включения 3-х лампочек.
2. Эмулятор закрывается, и посылается опять 6 сообщений для выключения этих лампочек.

В итоге все 12 сообщений дойдут и сделают свое дело, не важно с какой скоростью.

Patron 3rd January 2013 15:19

Quote:

Originally Posted by Titus (Post 564198)
В итоге все 12 сообщений дойдут и сделают свое дело, не важно с какой скоростью.

Это в теории.

А на практике - лампочка не выключится, если была включена меньше чем за 90 мс до этого.

Даже если просто послать три команды выключения трёх лампочек друг за другом без задержек - с вероятностью ~ 10% одна из лампочек останется гореть. Почему так - утверждать не берусь, но преодолел я эту беду, введя задержку в 30 мс между посылкой "лампочных" виртуальных нажатий для разных лампочек.

Titus 3rd January 2013 15:34

Quote:

Originally Posted by Patron (Post 564207)
Это в теории.

А на практике - лампочка не выключится, если была включена меньше чем за 90 мс до этого.

Даже если просто послать три команды выключения трёх лампочек друг за другом без задержек - с вероятностью ~ 10% одна из лампочек останется гореть. Почему так - утверждать не берусь, но преодолел я эту беду, введя задержку в 30 мс между посылкой "лампочных" виртуальных нажатий для разных лампочек.

У меня такого эффекта не наблюдается.
Проверяю просто:
Не вставляю дискетку в привод 0, начинаю с нее грузится, лампочка начинает посотянно быстро мигать. В это время переключаюсь между окном эмулятора и другим окном. В момент переключения восстанавливаетася состояние системных лампочек. И сколько не переключаюсь - все без сбоев. Может это на моей системе и клавиатуре.
На других - проверяйте сами) Данных пока не имею. С моего эмулятора имеется в виду.


All times are GMT +4. The time now is 02:45.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.