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

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

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

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

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

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

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Vourhey
Почетный модератор
6481 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
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 / 2
Регистрация: 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 / 2
Регистрация: 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 / 2
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2012, 09:47
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.10.2012, 09:47
Ответ Создать тему
Опции темы

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