Войти
ФлеймФорумПрограммирование

Если бы вы писали WinAPI - как бы вы рассылали сообщения окнам?

Страницы: 1 2 328 29 Следующая »
#0
10:51, 10 мая 2021

Вопрос этот занимает меня уже довольно давно.
WndProc из WinAPI хренова тем что гигантский switch может образоваться без возможности сильных оптимизаций - поле кодов сообщений гигантское.
ООП/С++/Obj-C использовать нельзя - нужно чтобы подход был совместим с Си без классов для максимального охвата языков программирования.
Какие возможны более оптимальные и быстрые альтернативы по вашему мнению?


#1
11:09, 10 мая 2021

А какие там могут быть варианты? Либо как в WinAPI лопатить очередь, либо  регистрировать колбэки - тут возникает проблема с разрегистрацией оных, при завершении процессов.

#2
11:35, 10 мая 2021

Ивенты через колбэки.

#3
11:40, 10 мая 2021

gamedevfor
> Ивенты через колбэки.

Вопрос в технике реализации.

#4
11:54, 10 мая 2021

=A=L=X=
> Вопрос в технике реализации.

Да вроде техника event-driven GUI одна.

#5
(Правка: 11:56) 11:55, 10 мая 2021

gamedevfor
> Да вроде техника event-driven GUI одна.

Вот и интересует как реализовать её на Си чтобы был сабж.
В чём так сказать MS ошиблись и что недодумали.

#6
(Правка: 16 мая 2021, 9:51) 11:59, 10 мая 2021

Смотря что тебя интересует. Есть два метода: 1 - через ожидание событий GetMessage: 2 - постоянная занятость PeekMeesage (для Windows, для других систем примерно то же самое).

В первом, ты ждёшь пока прийдёт событие, во втором, проходишь по циклу работы программы и вызываешь обработку событий.

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

Он меняет шило на мыло. Свитч на свитч, но признаваться в этом не хочет. ))))

#7
12:01, 10 мая 2021

О изоморфизме способов синхронизации ОС.
ИзображениеТЕМА #39, АБЗАЦ #764Изображение

О распознавании сообщений автоматом. 
ИзображениеТЕМА #35, АБЗАЦ #308Изображение

Вообще же для Windows вполне работает FORTH-схема: сообщения - лишь слова СЛОВАРЯ. Я сейчас часто этим пользуюсь.

#8
(Правка: 12:10) 12:05, 10 мая 2021

Mirrel
> Смотря что тебя интересует.

Меня интересует каким образом можно заменить WndProc из WinAPI чтобы было вменяемо и быстро.
У WndProc есть много недостатков:
1. тело превращается в switch, что может быть неэффективно
2. параметры сообщения с одной стороны заужены до двух целых чисел, а с другой зачастую и они излишни
3. сообщение которое самим окном не обрабатывается, а "пустое" и нужно направить в дефолтный обработчик всё-равно дёргает WndProc и нагружает ресурсы чтобы понять что его надо передать в дефолтный обработчик

Речь не про общую картину кто ждёт а кто опрашивает, а про альтернативные реализации самой обработки сообщений.
При этом, вспомнил, нам надо сохранить событийную модель в плане того что есть потокобезопасная очередь сообщений где "события" могут некоторое время "повялиться" прежде чем будут обработаны.
В идеале чтобы 10000 окон нарисовались за 10 нс.

#9
(Правка: 12:21) 12:13, 10 мая 2021

=A=L=X=
> В чём так сказать MS ошиблись и что недодумали.

Надо понимать что в те года в MS творился в разработке полный мрак (Windows95 настоятельно рекомендовал ставить её только на диск С:\).
Очереди сообщений были спасательным кругом для MS, так как очереди не навязывают жестких правил для разработчиков, а инженерам было легче раcширять оконную систему. Цена за это была огромная: мультимедиа и игры не могли работать в рамках WinAPI из-за диких тормозов и требовалось новое API в виде DirectX.
То есть они не ошиблись и не недодумали - у них тогда просто не было другого выбора.

#10
12:16, 10 мая 2021

Mirrel
> Всё будет одинаково.

Ты явно не понял вопроса.

#11
(Правка: 12:31) 12:31, 10 мая 2021

=A=L=X=
> Меня интересует каким образом можно заменить WndProc из WinAPI
Очевидно никаким. Этот коллбек будет либо дефолтный, либо переопределен, но будет в любом случае.

> тело превращается в switch, что может быть неэффективно
Это чем же свич не эффективен, в сравнении с чем?

#12
12:38, 10 мая 2021

=A=L=X=

найди работу

#13
13:09, 10 мая 2021

innuendo
> найди работу
+

#14
13:40, 10 мая 2021

innuendo
> найди работу

Работаешь на майских?

Страницы: 1 2 328 29 Следующая »
ФлеймФорумПрограммирование