Всем добрый день, у меня проблема с ф-цией PostMessage().
Ф-ция вызывается в одном потоке, обработчик ее находится в другом потоке (главном потоке приложения).
По нажатию кнопки запускается поток, который выполняет сохранение файла (сохранение длится около 20 секунд, поэтому было принято решение вынести его логику в отдельный поток, чтоб не блокировать пользовательский интерфейс). Этот поток шлет сообщение главному потоку приложения при помощи PostMessage() для выполнения специфических операций. И все вроде бы ничего, но в какой-то момент сообщение не доходит до функции-обработчика и сохранение файла завершается неудачно. Самое интересное, что когда после этого происходит нажатие на эту же кнопку PostMessage() выполняется успешно и обработчик благополучно выполняется.
Кто-нибудь знает какие-нибудь особенности работы PostMessage() и причины почему сообщения иногда доходят, а иногда — нет.
Еще один момент. Проблема актуальна когда пользователь нажимает на кнопку с очень маленьким интервалом (4 — 5 нажатий в секунду). Такова специфика этого теста. Если пользователь нажимает кнопку с периодичностью 1 раз в 2-3 секунды — все работает нормально.
T>Блог говорит про PostThreadMessage, а не про PostMessage. Там по ссылке как раз таки совет как бороться с пропадающими сообщениями: T>
T>If you need to communicate reliably with a thread that also displays UI, then create a hidden window and send or post messages to that window.)
T>А автор окнам сообщения шлет (судя по PostMessage).
Если немного подумать и понятьчто там написано, то станет ясно что неважно чем слать, а важно как обрабатывать.
Как много веселых ребят, и все делают велосипед...