tag:blogger.com,1999:blog-1688132520265708820.post4759714326149794346..comments2023-04-02T16:52:35.787+03:00Comments on Блог GunSmoker-а (переводы): Опасности сна в потоке с выборкой сообщенийGunSmokerhttp://www.blogger.com/profile/15611696588191431330noreply@blogger.comBlogger1125tag:blogger.com,1999:blog-1688132520265708820.post-11359721239838003162010-09-24T14:56:04.226+04:002010-09-24T14:56:04.226+04:00Случайно натолкнулся на вашу статью, пусть не вовр...Случайно натолкнулся на вашу статью, пусть не вовремя но сочту нужным высказать своё мнение, точнее дополнение.<br />Приведённая выше петля обработки сообщений создана для обработки отложенных сообщений (отправленный процедурой PostMessage) и если все сообщения отправляются именно таким образом, то никаких проблем возникнуть не должно. Но если кто-то из другого потока отправит сообщение функцией SendMessage, то только тогда, как я понимаю, произойдёт задержка. Причина проста - все сообщения окна обрабатываются в потоке где живёт это окно и, соответственно, вызов SendMessage пойдёт по по пути постановки сообщения в очередь и ожидания его выполнения. что, как сказал автор, приведёт к задержке. Программист, написавший петлю обработки сообщений, использовал Sleep для экономии процессорного времени, что в принципе логично, за исключением проблем с задержкой выполнения. Обходится данная ситуация просто - Для получения очередного сообщения используйте функцию GetMessage. Функция ожидает появления в очереди сообщения. Механизм ожидания реализован на уровне системных объектов, по этому поток замрёт до появления сообщения. Функция возвращает Истину если сообщение получено либо Ложь если получено сообщение WM_Quit.Vidoshttp://delphikingdom.com/asp/users.asp?ID=21036noreply@blogger.com