Бедный Input, всем чего-то от него надо...
Цитата:
PROCEDURE (rd: Rider) Input (OUT x, y: INTEGER; OUT modifiers: SET; OUT isDown: BOOLEAN)
NEW, ABSTRACT
Polls the current mouse location and tells whether the mouse button is currently pressed. All coordinates are in pixels. In modifiers, the currently pressed modifier keys are returned, like Controllers.doubleClick, Controllers.extend, Controllers.modify, Controllers.popup, Controllers.pick, and possibly additional platform-specific modifiers. For the mapping of platform specific keys see platform specific modifiers.
Чего ж тут некорректного, когда Input используется для выяснения координат указателя или состояния модификаторов? Все в строгом соответствии.
Предложенное добавление задержки в Input плохо именно тем, что это недокументированный побочный эффект.
Равно как и то, что добавлено в Input с подачи Джозефа Темпла для его хттп-сервера, а нами позже "причесано": вызов InsistentActions или как там в конце концов мы их назвали.
И то, и другое - недокументированный побочный эффект.
Джозеф, по крайней мере, понятно, из-за чего замутил воду. Из-за нецелевого использования ББ. ББ - однопользовательское приложение, а не серверная платформа. По причине гибкости, впрочем, оказалось, что и Джозефский сервер потянул. Введение InsistentActions - это попытка расширить целевые использования ББ, т.е. подправить ББ, чтобы он мог и серверные приложения тянуть "без натяжек".
Не оч понятно, для чего вам нужна пауза. Абстрактно, конечно, понятно - чтобы ЦПУ меньше загружался. А практически - не оч понятно. У меня на одной ЭВМ не жужжит, потому что жужжалки нет; на другой жужжалка есть, но действия мышью никак с жужжанием/нежужжанием не коррелируют. Вы прям надолго мышь зажимаете?
Не ожидал, что Иван будет готов
Иван Денисов писал(а):
пропатчить все циклы, где используется f.Input в блокирующем исполнении установкой соответствующих задержек.
Гораздо корректнее, имхо, было бы
1) ввести
PROCEDURE Ports.PollModifiers (OUT mods: SET);
PROCEDURE Ports.PollPointer (f: Ports.Frame; OUT x, y: INTEGER);
То есть наподобие того, что arisu предложил InputOnce.
2) Изменить контракт Ports.Frame.Input: указать в документации, что "возможны искажения", т.е. побочные эффекты в виде вызова действий и задержек.
Размер задержки я бы оставил константой. Это маргинальная необходимость, имхо, кому надо - может перекомпилировать. В крайнем случае - в платформенном модуле разместить эти средства.
Есть, конечно, еще вариант: внутри обработки нажатия вызывать задержки и действия, а вне - не вызывать. Но все равно "контракт" нужно менять в документации.