Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Visheskaras
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 8
#1

Не происходит перерисовка окна во время длительных вычислений - C++

09.10.2012, 13:32. Просмотров 1010. Ответов 11
Метки нет (Все метки)

При написание программы с использованиям Windows Forms возникла следующая проблема: окно программы вовремя выполнения расчета не перерисовается, после перекрытия другим окном, в результате вместо окна программы, в то время, когда она выполняет расчет, я вижу кусок другого окна или рабочего стола. Хотелось бы узнать из-за чего возникает данная и проблема и как ее решить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2012, 13:32
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Не происходит перерисовка окна во время длительных вычислений (C++):

Замерить время вычислений
Добрый вечер. Есть ли способ замерить продолжительность процесса вычислений,...

Организация вычислений во время ввода данных
Известны оценки каждого из учеников класса по физике. Посчитать количество...

OpenMP. Возможность неблокировки UI на время вычислений
насколько я понял OpenMP хорошо распараллеливает те участки программы, где...

Организация вычислений во время ввода данных
Известны оценки каждого из учеников класса по физике. Посчитать количество...

Организация вычислений во время ввода данных
Дано натуральное число. Верно ли, что произведение его цифр меньше а, а само...

Организация вычислений во время ввода данных программа С++
Помогите написать программу в С++ Дано натуральное число, в котором все...

11
Vourhey
Почетный модератор
6490 / 2264 / 187
Регистрация: 29.07.2006
Сообщений: 12,534
09.10.2012, 13:37 #2
Visheskaras, расчеты в отдельный поток.
1
Visheskaras
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 8
09.10.2012, 13:40  [ТС] #3
А как создать отдельный поток?
0
-=ЮрА=-
Заблокирован
Автор FAQ
09.10.2012, 14:24 #4
Цитата Сообщение от Visheskaras Посмотреть сообщение
А как создать отдельный поток?
- вот простой пример с синхронизацией через критическую секциюПроизводитель-Потребитель

Добавлено через 2 минуты
Visheskaras, ещё одним вариантом может быть введение PeekMessage в теле прорисовки
1
Visheskaras
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 8
15.10.2012, 15:26  [ТС] #5
Всем спасибо, закинул вычисления в отдельный поток с помошью класса Thread, но возникла другая проблема: не могу получить доступ из отдельного потока к progressbar
0
Kgfq
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
15.10.2012, 15:59 #6
Visheskaras, передай потоку указатель на этот бар
0
Visheskaras
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 8
15.10.2012, 16:20  [ТС] #7
Kgfq, Один хер: Недопустимая операция: попытка доступа к бару не из того потока, в котором он был создан
0
Kgfq
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
15.10.2012, 16:47 #8
тогда передавайте данные в основной и там меняйте его
0
Visheskaras
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 8
15.10.2012, 18:41  [ТС] #9
и тогда получается, основной поток должен постоянно мониторить эти данные вместо перерисовки, изменения положения и размеров основного окна, вернулись к проблеме в первом сообщении
0
Kgfq
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
15.10.2012, 19:06 #10
Visheskaras, он сделать так:

1) проверить данные, изменить что надо
2) перерисовать
3) заново

Добавлено через 1 минуту
Visheskaras, он сделать так:

1) проверить данные, изменить что надо
2) перерисовать
3) заново
1
-=ЮрА=-
Заблокирован
Автор FAQ
15.10.2012, 20:12 #11
Цитата Сообщение от Visheskaras Посмотреть сообщение
и тогда получается, основной поток должен постоянно мониторить эти данные вместо перерисовки, изменения положения и размеров основного окна, вернулись к проблеме в первом сообщении
- дочерний поток для корректной работы просто ОБЯЗАН быть синхронизирован с основным, на том же примере что подавал выше основным потоком в модели производитель потребитель можно рассматривать ConsumerThread которому поток ProducerThread обновляет данные (да основной поток main но можно легко выводить данные в нём, просто вставить в него ConsumerThread). Из этого следует что твой основной поток ОБЯЗАН мониторить дочерний и никак иначе

Visheskaras, если твои потоки несинхронизированы - это ОЧЕНЬ ЖИРНЫЙ минус для работы твоей программы: потоки живут неконтролируемой жизнью - как следствие зацикливание, выходы за пределы отведенной памяти - отсутсвие обмена данных. А вот с синхронизацией можно обеспечить обмен данными(как я понял из постов её таки в проекте нет)
0
Visheskaras
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 8
16.10.2012, 09:47  [ТС] #12
-=ЮрА=-, тогда я вообще не понимаю, какой смысл использовать потоки, и почему нельзя управлять вторичным потоком с помощью делегатов и сообщений?

Добавлено через 16 минут
И еще возник вопрос, что происходит с вторичным потоком после того, как его функция доходит до своего последнего }

Добавлено через 25 минут
Мне хотелось бы, что бы после нажатия кнопки: стартавал поток thread1 и блокировалась кнопка. В потоке выполнились расчеты, по ходу которых генерировались бы события, которые увеличивали бы значения прогрессбара, в конце расчетов сообщение, обработка которого заключалась бы в выводе результатов расчета в соответсвующие поля, разблокировки кнопки и обнулении прогрессбара. Можете объяснить чем плох этот вариант?
0
16.10.2012, 09:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2012, 09:47
Привет! Вот еще темы с решениями:

Активный загрузочный экран во время выполнения длительных вычислений C#
Здравствуйте, уважаемые знатоки!) Прошу помощи в вопросе программирования на...

Цикл: Как избавится от зависаний интерфейса во время длительных вычислений с использованием таймера...
Здравствуйте. Столкнулся с проблемой. Wpf приложение получает некоторые данные...

Создать видимость выполнения длительных вычислений
Здравствуйте. Нужна программа, которая будет производить какие-либо...

Посоветуйте хостинг для длительных вычислений
Никогда не выбирал. Есть программа, которая выполняет ресурсозатратные расчеты...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru