|
8 / 8 / 3
Регистрация: 17.05.2012
Сообщений: 50
|
|
Перемещение формы во время выполнения цикла29.06.2012, 19:52. Показов 2831. Ответов 15
Метки нет (Все метки)
Здравствуйте. Возникла проблема следующего характера. Во время выполнения какого нибудь долгого цикла, программа, своего рода, зависает, и попытки переместить форму, или даже попросту по ней кликнуть приводят к тому, что Windows (семерка) предлагает закрыть зависшее приложение. И это нормально. Разумеется, в цикле стоит команда изменения положения ProgressBar-а, чтобы пользователь видел, сколько ему осталось ждать, однако хотелось бы сделать так, чтобы программа вела себя нормально при действиях с формой. Как это можно сделать? Может есть какой нибудь метод обновления формы, вызов которого можно поставить при завершении каждой итерации цикла?
0
|
|
| 29.06.2012, 19:52 | |
|
Ответы с готовыми решениями:
15
Перемещение формы во время выполнения функции
Окно программы во время выполнения цикла |
|
48 / 47 / 7
Регистрация: 19.06.2012
Сообщений: 134
|
|
| 29.06.2012, 19:58 | |
|
Application->ProcessMessage
Это?
1
|
|
|
return (true);
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
|
|
| 29.06.2012, 20:07 | |
|
1
|
|
|
8 / 8 / 3
Регистрация: 17.05.2012
Сообщений: 50
|
|
| 29.06.2012, 20:13 [ТС] | |
|
Спасибо, оно) Вышеперечисленные проблемы решены. Однако приложение не реагирует на закрытие (через крестик), и в свернутом виде при предпросмотре через AeroPeek не обновляется. Можно ли это тоже как нибудь реализовать?
0
|
|
|
48 / 47 / 7
Регистрация: 19.06.2012
Сообщений: 134
|
|
| 29.06.2012, 20:19 | |
|
Может этот долгий цикл реализовать в отдельном потоке?
0
|
|
|
8 / 8 / 3
Регистрация: 17.05.2012
Сообщений: 50
|
|
| 29.06.2012, 20:34 [ТС] | |
|
Ну просто я пока не умею работать с потоками в билдере) Но и этот способ тоже работает, но к сожалению напрягает тот факт, что невозможно закрыть программу.
0
|
|
|
48 / 47 / 7
Регистрация: 19.06.2012
Сообщений: 134
|
|
| 29.06.2012, 20:41 | |
|
В оконном приложении главный поток (первичный) желательно оставлять исключительно для обработки событий от оконных компонентов. Рано или поздно вы прийдете к этому. А потоки в билдере создавать довольно просто, тем более вам нужен лишь один.
По идее программа должна реагировать на закрытие, т.к. ProcessMessages() как и позволяет программе обработать сообщения в очереди... Может одна итерация занимает много времени, тогда попробовать почаще вызывать ProcessMessages().Лучше бы код показали, чем гадать в чем там проблемы.
0
|
|
|
8 / 8 / 3
Регистрация: 17.05.2012
Сообщений: 50
|
||||||
| 29.06.2012, 20:57 [ТС] | ||||||
|
Ну свой код показывать нет смысла, потому что цикл весьма громоздкий. Вот пример попроще:
0
|
||||||
|
48 / 47 / 7
Регистрация: 19.06.2012
Сообщений: 134
|
|
| 29.06.2012, 21:02 | |
|
Так вот если цикл громоздкий попробуйте почаще добавить более одного ProcessMessages(). А в этом коде проблема совсем другая... так в Memo добавлять не очень культурно
0
|
|
|
8 / 8 / 3
Регистрация: 17.05.2012
Сообщений: 50
|
||||||
| 29.06.2012, 21:10 [ТС] | ||||||
|
Не помогает добавлять почаще ProcessMessages(). Все равно сообщение о закрытии обрабатывается только после завершения цикла. Но ведь вряд ли здесь не получается обработать сообщение закрытия из-за того, что я добавляю строчку в Memo? Например если я сделаю вот такой код:
0
|
||||||
|
48 / 47 / 7
Регистрация: 19.06.2012
Сообщений: 134
|
|
| 29.06.2012, 21:31 | |
|
Да действительно. Могу только предложить завести переменную stop = false и проверять ее в цикле, а в Form1::Close() устанавливать ее в true. Вроде бы срабатывает.
1
|
|
|
8 / 8 / 3
Регистрация: 17.05.2012
Сообщений: 50
|
|
| 29.06.2012, 21:41 [ТС] | |
|
Спасибо, с введенной переменной работает. Значит метод OnClose все таки вызывается но почему то закрытие приложения игнорируется... Так может быть можно закрыть приложение прямо из этого метода другими средствами?
0
|
|
|
48 / 47 / 7
Регистрация: 19.06.2012
Сообщений: 134
|
|
| 29.06.2012, 21:46 | |
|
Думаю не желательно... Это как то связанно с оконными компонентами, к сожалению не в курсе как. Но если закомментировать внутри цикла обращение к оконным компонентам, то все срабатывает. Не было необходимости, так что подробней пояснить не могу.
1
|
|
|
8 / 8 / 3
Регистрация: 17.05.2012
Сообщений: 50
|
|
| 29.06.2012, 21:49 [ТС] | |
|
Понятно) Большое спасибо за помощь) В будущем сделаю все это через потоки) А пока реализую так.
UPD помог вызов exit() прямо из метода OnClose
0
|
|
|
|
|
| 29.06.2012, 23:02 | |
|
Что удивительно, такого метода в билдере нет.
0
|
|
|
8 / 8 / 3
Регистрация: 17.05.2012
Сообщений: 50
|
|
| 29.06.2012, 23:55 [ТС] | |
|
Да, прошу прощения, не метода а события, оговорился
0
|
|
| 29.06.2012, 23:55 | |
|
Помогаю со студенческими работами здесь
16
Как задать время выполнения цикла в секундах? Не могу достать данные из потока во время выполнения цикла Нет ответа на команды во время выполнения бесконечного цикла SIMATIC S7-400. Почему увеличивается время выполнения программного цикла? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|