|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
18.08.2015, 17:03 | #1 |
Форумчанин
Регистрация: 13.08.2015
Сообщений: 193
|
Почему не добавляется в очередь сообщение WM_TIMER????
Вот код кнопки которая создает таймер и в цикле мониторит сообщения
Код:
Код:
Если я вручную посылаю, тогда да WM_TIMER добавляется в очередь, а сама Windows его не добавляет почемуто??? Это я тестирую программку на зависание в обработчике сообщения, но ничего у меня не получается таймер вызывать. Я вообще подозреваю что сам обработчик кнопки не отпускает функцию SetTimer и получается что функция как бы не установлена, а будет она установлена только после того как обработчик кнопки завершится, это так да? добавил в OnInitDialog SetTimer(1,10000,NULL);//установка таймера И все рамно не посылаются сообщения WM_TIMER????? Последний раз редактировалось ninja2; 18.08.2015 в 17:14. |
18.08.2015, 17:54 | #2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
WM_TIMER и WM_PAINT нельзя посылать вручную.
Зачем это надо - SetTimer пошлет когда надо. |
18.08.2015, 18:13 | #3 | ||
Форумчанин
Регистрация: 13.08.2015
Сообщений: 193
|
Цитата:
Код:
Код:
Цитата:
Код:
Код:
Почему такое я немогу сделать с помощью WM_TIMER??? получается WM_TIMER не посылается???? Можешь попробовать протестить, WM_TIMER не посылается в очередь. И чем отличается функция PeekMessage от GetMessage ???? Последний раз редактировалось Stilet; 18.08.2015 в 21:26. |
||
18.08.2015, 19:53 | #4 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
WM_TIMER WM_PAINT имеют "защиту" от зависания.
ВСЕ такие сообщения внутри очереди сообщений ДО передачи в программу собираются в ОДНО сообщение. т.е. в любой момент времени вы очереди может быть НЕ более одного WM_PAINT WM_TIMER. все "лишние" "пропадают". по сути это флаги, которые многократно взводятся системой, и разово сбрасываются при выборке соответствующих сообщений приложением.
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 18.08.2015 в 19:57. |
18.08.2015, 20:16 | #5 | |
Форумчанин
Регистрация: 13.08.2015
Сообщений: 193
|
Цитата:
нипойму ниче чем функция PeekMessage отличается от GetMessage??? Вот код с функцией PeekMessage Код:
Код:
Последний раз редактировалось Stilet; 18.08.2015 в 21:26. |
|
18.08.2015, 20:31 | #6 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
Цитата:
т.е. ПОСЛЕ обработки сообщений от UpdateData.
программа — запись алгоритма на языке понятном транслятору
|
|
18.08.2015, 20:43 | #7 | ||
Форумчанин
Регистрация: 13.08.2015
Сообщений: 193
|
Цитата:
Только проверил с while(PeekMessage) все вызывается. Вообще походу если в одном потоке работаем то чтобы цыкл не зависал, нужно обрабатывать сообщения в цыкле. Даже обработчик один и тот может подвесить прогу если зацыкление сделать в нем. Тут походу Функции из обработчиков выполняются попорядку а не паралельно как я думал. Да в одном потоке функции походу не могут выполняться паралельно, просто эмитация получается или как???? Что вообще произойдет если я допустим вызвал из кнопки сообщение WM_TMER, а затем из обработчика WM_TIMER выловил снова это же сообщение WM_TIMER и обработал его?? Как вы думаете? Варианты: 1. вызовется функция как из функции. 2. эта функция прекратит свою работу и вызовется новая функция? Наверно вызовется функция как из функции да? Это можно проверить. Да проверил, вроде получается вызов функции из функции, потом возврат и дальше продолжается функция которая вызвала. Да похоже работа в одном потоке она идет как в одном потоке, а то просто создается впечатление что оно работате в несколько патоках или паралельно. То что мы из фукнции работающей в данный момент вызываем функции мелкие обработчики и они что то делают, ну это как бы просто создает впечатление паралельной работы, а по ходу все оно идет по порядку как и в консоли?????. Да по порядку должно быть, потому что один поток, по другому не может быть. Идет один поток и вызовы функций наверно. Цитата:
Проверил, отослал 5 WM_TIMER и 5 выловил в очереди, так что может быть сколько угодно в очереди . Последний раз редактировалось ninja2; 18.08.2015 в 21:33. |
||
18.08.2015, 21:50 | #8 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Вот вам "каноническое" Windows приложение - разберитесь сначала что к чему в нем, иначе вам будет трудно в дальнейшем.
http://blogs.msdn.com/b/oldnewthing/.../23/54576.aspx |
18.08.2015, 22:29 | #9 | |
Форумчанин
Регистрация: 13.08.2015
Сообщений: 193
|
Цитата:
От щас смотрю там цикл сообщений while(GetMessage), от я не помню в тех программах на WinApi что я разбирал был ли он, наверно ж был, просто я не обратил на него внимания , щас гляну. Глянул я разбирал самый простой тип приложения на диалоговых окнах, там у меня небыло цикла сообщений. DialogBox в WinMain и функция Porc со свичь которая передается в DialogBox. Я за этот GetMessage первый раз слышу Последний раз редактировалось ninja2; 18.08.2015 в 22:48. |
|
18.08.2015, 23:13 | #10 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Да, DialogBox делает обработку сама, но на этой функции далеко не уехать.
В MFC легче, потому что есть всякие wizards. Если делать все самому руками то WINAPI проще. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Подскажите пожалуйста почему добавляется всего одна буква из трех? | Nata Golden rose | Общие вопросы C/C++ | 2 | 22.05.2014 05:29 |
вводим 15 элементов в очередь, затем выводим на экран эту очередь и добавил в очередь еще один элемент. Потом удаляем любой элемен | Xumera | C++ Builder | 2 | 07.12.2013 13:56 |
Почему такое сообщение | ГОСЕАН | Помощь студентам | 2 | 31.10.2011 10:21 |
Почему не выводится сообщение? | [MI_nor] | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 8 | 10.04.2011 21:30 |
Не добавляется элемент в очередь | Дырдин | Общие вопросы C/C++ | 2 | 22.04.2010 07:31 |