Как знать, должен ли io поток остаться открытым или закрыться каждый раз

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

Архитектура X11 для обработки входных событий довольно проста: либо событие было схвачено клиентом, в этом случае клиент получает событие, или событие не было схвачено, в этом случае клиент, который в настоящее время имеет Фокус получает событие. Нет возможностей для отправки keyrelease событий отдельно на основе которого клиент получил событие Cyjess .

Пример, в котором явно будет неправильно повторно маршрут keyrelease событий для клиента, который получил клавишу , является с модификаторами. На изменение фокуса, если модификатор нажата, он остается нажатым. Событие Courrelease отправляется, когда модификатор больше не нажата. Хотя это может иметь смысл отправить keyrelease событий для всех депрессивных модификаторов на убытках фокуса и отправки соответствующих CAYPRESS события для вновь сфокусированного окна, это не будет точным отчетом о Фактический пользовательский ввод, который будет особенно разрушительным для изменений в фокусе между виджетами того же приложения.

Другим примером, когда поведение X11 явно правильно, и ваше предложение повторного маршрутизации событий KEYPRESS было бы неправильно, является изменением фокусировки между виджетами того же приложения. Было бы неправильно отправлять ложные события, если приложение заботится об этом конкретном ключ, не заботясь о том, какой виджет был сосредоточен. Но если приложение не позаботится о том, какой виджет получает событие Keyrelease , то это событие обязательно должно быть отправлено в виджете, который имеет фокус в то время.

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

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

В сценарии вы описываете, это ясно, что приложение Firefox / JavaScript, которое делает что-то не так. Большинство интерфейсов клавиатуры основаны на ключевых прессах, а не на ключевых релизах. В частности, это нажатие входит , который должен вызывать что-то произойти, а не , выпуская . Если приложение реагирует на ключевое событие выпуска, ONUS находится на нем, чтобы обрабатывать ситуации, в которых он получает событие keyrelease , не получив совпадение keyPress .

Клики мыши несколько разные, потому что существует много ситуаций, когда ожидается, что интерфейс реагирует на выпуск событий, таких как перетаскивание или события, которые зависят от продолжительности щелчка. Даже тогда приложение, как правило, должно быть не реагировать на мероприятие Buttonrealease , если он не получил соответствующий ButtonPress .

0
18.03.2014, 15:27
2 ответа

Обязательно держите его открытым! Единственная причина закрыть его - сохранить синхронизацию, но вы можете вызвать синхронизацию вручную, если боитесь перебоев в подаче электроэнергии. Если вы все время закрываете его, возникают огромные накладные расходы, потому что буфер должен быть очищен, и есть больше вызовов write , если вы пишете каждый фрагмент вручную. Не говоря уже о поиске конца файла, изменении отметок времени в файловой системе и так далее ...

0
28.01.2020, 05:00

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

Напишите две программы, одна из которых открывает / ищет до конца файла / записывает / закрывает каждую секунду. Напишите другую программу, которая просто открывается, записывает, ждет секунду, снова пишет, ждет секунду и т. Д. Посмотрите, работает ли какая-либо из них для вас.

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

0
28.01.2020, 05:00

Теги

Похожие вопросы