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

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

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

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

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

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

C++ Точность вычислений
C++ Можно ли изменить иконку окна во время выполнения программы?
Можно ли изменить иконку окна во время выполнения программы? C++
C++ Погрешность вычислений
C++ Замерить время вычислений
Организация вычислений во время ввода данных C++
C++ Организация вычислений во время ввода данных
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6473 / 2248 / 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++ OpenMP. Возможность неблокировки UI на время вычислений
C++ Игра пятнашки, управление мышью или клавишами, перерисовка фишки
Организация вычислений во время ввода данных C++
C++ Организация вычислений во время ввода данных программа С++

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

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

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

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

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