![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| lollollollol |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
Создаётся окно на апи
обратите внимание на строку
вопрос: Как я понимаю, когда окну ОС отправляет собщение, его обрабатывает функция WindowProcLogin. Верно? Если я не ошибаюсь, следующий вопрос - Когда в окно отправляется, допустим 10 сообщений, но оно ещё не обработало первое, как будет вести себя программа? 1. Подождёт обработки первого, потом обработает остальные в порядке очереди (если так, то какой максимальный размер очереди?) 2. Обработка каждого сообщения будет выполняться сразу, как оно приходит. Т.е. получается выделяет по потоку на сообщение? Например отправляет 10 сообщений, каждое из которых обрабатывается по 10 секунд. Программа отработает за 1. 100 секунд (по очереди) 2. 10 секунд (запустит по 10 потоков) ? спасибо |
||||
|
|||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 15 Всего: 72 |
1 - правильно. Оконная процедура вызывается в контексте потока, создавшего окно. Этим, кстати, можно пользоваться для гарантированного выполнения кода в нужном потоке.
Посему - сообщения будут накапливаться и выполняться в порядке очереди. А вот как организована очередь - отдельная тема. Куда в очередь встанет сообщение зависит от того, как оно послано (SendMessage и PostMessage), от типа сообщения (например, емнип, WM_TIMER имеет очень низкий приоритет и его спокойно "отодвигают" в конец очереди). |
|||
|
||||
| lollollollol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
понял, а какой размер очереди может быть максимально?
сколько сообщений в очереди могут стоять? |
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 15 Всего: 72 |
10000 by default При этом не надо забывать, что немалая часть сообщений приходит вне очереди (nonqueued messages, а некоторые сообщения всегда откладываются в конец очереди и даже "складываются" друг с другом (WM_PAINT) Добавлено через 3 минуты и 19 секунд Подозреваю, что часть операций, которые занимают по 10 секунд, надо вынести в отдельный поток. Наверное, лучше бы обрисовать конкретную задачу, если это не академический интерес. Это сообщение отредактировал(а) kami - 17.9.2014, 21:09 |
|||
|
||||
| lollollollol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
спасибо.
задачу выполнил, очередь не больше 1000 сообщений в пиковые моменты. вынес работу в отдельный поток |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |