| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > lpfnwndproc, очередь, или потоки? |
| Автор: lollollollol 14.9.2014, 14:50 | ||||
Создаётся окно на апи
обратите внимание на строку
вопрос: Как я понимаю, когда окну ОС отправляет собщение, его обрабатывает функция WindowProcLogin. Верно? Если я не ошибаюсь, следующий вопрос - Когда в окно отправляется, допустим 10 сообщений, но оно ещё не обработало первое, как будет вести себя программа? 1. Подождёт обработки первого, потом обработает остальные в порядке очереди (если так, то какой максимальный размер очереди?) 2. Обработка каждого сообщения будет выполняться сразу, как оно приходит. Т.е. получается выделяет по потоку на сообщение? Например отправляет 10 сообщений, каждое из которых обрабатывается по 10 секунд. Программа отработает за 1. 100 секунд (по очереди) 2. 10 секунд (запустит по 10 потоков) ? спасибо |
| Автор: kami 14.9.2014, 21:10 |
| 1 - правильно. Оконная процедура вызывается в контексте потока, создавшего окно. Этим, кстати, можно пользоваться для гарантированного выполнения кода в нужном потоке. Посему - сообщения будут накапливаться и выполняться в порядке очереди. А вот как организована очередь - отдельная тема. Куда в очередь встанет сообщение зависит от того, как оно послано (SendMessage и PostMessage), от типа сообщения (например, емнип, WM_TIMER имеет очень низкий приоритет и его спокойно "отодвигают" в конец очереди). |
| Автор: lollollollol 17.9.2014, 20:22 |
| понял, а какой размер очереди может быть максимально? сколько сообщений в очереди могут стоять? |
| Автор: kami 17.9.2014, 21:09 |
http://msdn.microsoft.com/en-us/library/ms644944.aspx При этом не надо забывать, что немалая часть сообщений приходит вне очереди (http://msdn.microsoft.com/ru-ru/library/windows/desktop/ms644927(v=vs.85).aspx#nonqueued_messages, а некоторые сообщения всегда откладываются в конец очереди http://msdn.microsoft.com/ru-ru/library/windows/desktop/ms644927(v=vs.85).aspx#quequed_messages (WM_PAINT) Добавлено через 3 минуты и 19 секунд Подозреваю, что часть операций, которые занимают по 10 секунд, надо вынести в отдельный поток. Наверное, лучше бы обрисовать конкретную задачу, если это не академический интерес. |
| Автор: lollollollol 22.9.2014, 10:47 |
| спасибо. задачу выполнил, очередь не больше 1000 сообщений в пиковые моменты. вынес работу в отдельный поток |