Почему в основной программе не виден цикл обработки сообщений

Почему-то функция PostQuitMessage(0) не ловится циклом обработки сообщений:

while (!fDone) < if (PeekMessage( if (msg.message!=WM_QUIT) < TranslateMessage( DispatchMessage( >else < fDone=TRUE; >> else < RenderScene(); >>

Практически msg.message всегда не равно WM_QUIT, т.е. происходит как бы игнорирование PostQuitMessage.
В принципе я могу fDone=TRUE делать, но хотелось бы понять, в чем проблема?

Профессионал
Сообщений: 3,882
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 27.06.2002
Адрес: Санкт-Петербург

18.11.2008, 23:42

Мне представляется, дело в том, что — единственное из всех, сообщение WM_QUIT находится на «особом положении» и обрабатывается особым образом, немедленно прерывая цикл подкачки сообщений и инициируя завершение приложения. Я неоднократно встречал упоминания об этом в литературе и в MSDN; правда, точных ссылок дать сейчас не могу, а перелопачивать исходники MFC и RTL единственно для точной ссылки и «железобетонной» аргументации шибко неохота.

On Error Resume vs. GoTo и работа с ошибками (Серия VBA 36)

Сообщений: 957
Сказал(а) спасибо: 0
Поблагодарили 17 раз(а) в 16 сообщениях
Регистрация: 28.01.2007
19.11.2008, 15:40

перелопачивать исходники MFC и RTL единственно для точной ссылки и «железобетонной» аргументации шибко неохота.

В принципе понятно, что я не сделал ошибки, а это главное. На будущее я просто запомню, что WM_QUIT — это очень нестандартное сообщение. Спасибо за объяснения!

« Предыдущая тема | Следующая тема »

Опции просмотра
Линейный вид
Комбинированный вид
Древовидный вид

Источник: www.hardforum.ru

Основы программирования в RAD-средах. ГДЗ по Информатике 11 класс.

1. В каком смысле используется термин «проект» в программировании?
2. Из каких файлов состоит типичный проект в RAD-среде?
3. Что такое форма? Почему для описания формы в Lazarus используются два файла?
4. Какие основные окна используются в среде Lazarus? Зачем они нужны?
5. Покажите, что программа, написанная с помощью Lazarus, состоит из объектов.
6. С помощью какого механизма транслятор «подключает» форму?
7. Где расположена основная программа в проекте Lazarus? Объясните все команды основной программы.
8. Почему в основной программе не виден цикл обработки сообщений?
9. Назовите некоторые важнейшие свойства формы. Какими способами можно их изменять?
10. Приведите примеры автоматического построения и изменения кода в RAD-среде.
11. Как создать новый обработчик события? Подумайте, можно ли сделать это вручную.
12. Как передаются параметры сообщения в обработчик?

Читайте также:
360 document protector зачем нужна эта программа

09. Таймеры, использование времени простоя программы и локального цикла обработки сообщений


13. Как можно вывести сообщение об ошибке на экран?

Подготовьте сообщение
«Простая программа на языке C# в Visual Studio»

Задача

Попробуйте изменять какие-нибудь свойства формы, построив обработчик ещё одного события (например, OnShow — вывод формы на экран; OnClick — щелчок мыши; OnResize — изменение размеров).

Источник: murnik.ru

Почему в основной программе не виден цикл обработки сообщений

Создал кнопку и поле редактирование на форме. к кнопке добавил обработчик в котором в цикле выводится в поле редактирование значения. Но у меня виснет программа, как добавить в цикл for цикл обработки сообщений windows.

private void button_Click(object sender, RoutedEventArgs e) < MessageBox.Show(«start»); for(int i=0;i<1000;i++) < textBox.Text = Convert.ToString(i, 10); >MessageBox.Show(«end»); >
Регистрация: 12.01.2011
Сообщений: 19,500

Дык если надо чтоб не висло, то надо создать новый поток. (независимо WPF ли это или Дельфи)

В C# это делается относительно просто, особенно с async/await в .NET 4.5+. Ну или обычный Task из 4.0+. Более низкоуровневый вариант — Thread.

Форумчанин
Регистрация: 13.08.2015
Сообщений: 193

Дык если надо чтоб не висло, то надо создать новый поток. (независимо WPF ли это или Дельфи)

В C# это делается относительно просто, особенно с async/await в .NET 4.5+. Ну или обычный Task из 4.0+. Более низкоуровневый вариант — Thread.

А что там нету функций GetMessage или PeekMessage.
Должно в одном работать, нужно сообщения виндовс обрабатывать в цикле и все.

Поток создавать это один из вариантов, его позже попробую.

Последний раз редактировалось ninja2; 29.09.2015 в 14:50 .
Регистрация: 12.01.2011
Сообщений: 19,500

Надо ж не только посмотреть, но и достать/обработать.
В Дельфи подобное делается функцией ProcessMessages, а в виформс DoEvents.
В WPF нет такой простой функции (и вряд ли это сделано непреднамеренно), но немного более сложно наверно можно это сделать.
https://www.google.com/search?q=wpf+doevents+equivalent
Но даже если есть, обычно их использование для решения подобной задачи — плохой вариант, в любом ЯП/библиотеке. Используйте потоки.

Читайте также:
Подготовка резерва на конкретные должности по индивидуальной программе

Ну и вообще я ж писал в предыдущей теме http://programmersforum.ru/showpost. 1 29.09.2015 в 15:11 .
Форумчанин
Регистрация: 13.08.2015
Сообщений: 193

Надо почитать нормальную книжку по WPF сначала, разобраться с его основными фишками (+ общее из .NET типа потоков, синхронизации, структур данных).

Потом, мне простые приложения научится делать без наворотов. Буду делать так как в WPF. Нихо старое учить, WPF чуть разберусь можно и Silverlite попробовать. Лучше новое пробовать.

Вычитал что в WPF такой функции нету, что можно подключать функцию из windowsform, а как ее вызвать. Делаю так.

System.Windows.Forms.Application.DoEvents();

Пишет ошибку что пространство windows.Froms не определено, типо ссылки нету на зборку, а что это значит?

Источник: www.programmersforum.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru