Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Visheskaras
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 8
#1

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

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

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

Замерить время вычислений - C++
Добрый вечер. Есть ли способ замерить продолжительность процесса вычислений, детали которых скрыты? Есть объект, который производит...

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

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

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

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

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

Можно ли изменить иконку окна во время выполнения программы? - C++
Можно ли изменить иконку окна во время выполненния программы?

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

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

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

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

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

Visheskaras, если твои потоки несинхронизированы - это ОЧЕНЬ ЖИРНЫЙ минус для работы твоей программы: потоки живут неконтролируемой жизнью - как следствие зацикливание, выходы за пределы отведенной памяти - отсутсвие обмена данных. А вот с синхронизацией можно обеспечить обмен данными(как я понял из постов её таки в проекте нет)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2012, 09:47     Не происходит перерисовка окна во время длительных вычислений
Еще ссылки по теме:

Можно ли изменить иконку окна во время выполнения программы? - C++
Можно ли изменить иконку окна во время выполненния программы?

Игра пятнашки, управление мышью или клавишами, перерисовка фишки - C++
Думаю,что все знакомы с игрой пятнашки. Пока я только смогла нарисовать и задать начальное положение фишек.Но как подключить управление,я...

Порядок вычислений C++ - C++
Каков порядок вычисления для этого предложения,какие предположения можно сделать о типе операндов?Имеет ли место неоднозначность...

Распараллеливание вычислений - C++
Здравствуйте. Может кто сможет подсказать как мне решить следующую задачу: необходимо распараллелить следующий последовательный код:...

Распараллеливание вычислений - C++
Вычисляю произведение матриц несколькими потоками (количество задаётся пользователем). Потоки "засыпают" на 1 мс. При вычислении...


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

Или воспользуйтесь поиском по форуму:
Visheskaras
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 8
16.10.2012, 09:47  [ТС]     Не происходит перерисовка окна во время длительных вычислений #12
-=ЮрА=-, тогда я вообще не понимаю, какой смысл использовать потоки, и почему нельзя управлять вторичным потоком с помощью делегатов и сообщений?

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

Добавлено через 25 минут
Мне хотелось бы, что бы после нажатия кнопки: стартавал поток thread1 и блокировалась кнопка. В потоке выполнились расчеты, по ходу которых генерировались бы события, которые увеличивали бы значения прогрессбара, в конце расчетов сообщение, обработка которого заключалась бы в выводе результатов расчета в соответсвующие поля, разблокировки кнопки и обнулении прогрессбара. Можете объяснить чем плох этот вариант?
Yandex
Объявления
16.10.2012, 09:47     Не происходит перерисовка окна во время длительных вычислений
Ответ Создать тему
Опции темы

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