Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2009, 21:47   #1
huzik
Пользователь
 
Регистрация: 04.10.2009
Сообщений: 15
По умолчанию Проблема с ProgressBar

Всем спасибо за предыдущие ответы! Все круто работает! Однако столкнулся с очередной проблемой, точнее, недоразумением каким-то.

В общем, есть алгоритм поиска строки в массиве. Он работает мега быстро. Просматривает массив из 43700 элементов меньше, чем за секунду. Но! С прошлой версии алгоритма, когда он работал настолько медленно, что казалось, программа зависла, остался закомментированный ProgressBar. Ради интереса, я его раскомментировал, и, чудо!, алгоритм заработал раз в 10 медленнее. Неужто прогрессбар тормозит выполнение кода?

Прогресс у меня изменяется так: m_srcprg.SetPos(i_dic*100/43700);

Казалось бы, очень простое выражение... У кого какие мысли?
huzik вне форума Ответить с цитированием
Старый 15.10.2009, 21:50   #2
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Любое отображение информации на экране (попросту обновление/отрисовка) занимает гору времени (и следовательно замедляет все и вся).
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 15.10.2009, 22:06   #3
huzik
Пользователь
 
Регистрация: 04.10.2009
Сообщений: 15
По умолчанию

Хм... я, грешным делом, полагал, что работа интерфейса и всяких там просчетов ведется в разных потоках или как-то так. А можно как-то сделать так, чтобы отрисовка прогресса не влияла на производительность полезного кода? Ведь если бы отрисовка действительно так тормозила всю программу, разработчики давно бы уже отказались от всяких красивостей.
huzik вне форума Ответить с цитированием
Старый 15.10.2009, 22:29   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

более менее мощные проги работаю в многопоточном режиме
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.07.2013, 10:06   #5
Whatson
Новичок
Джуниор
 
Регистрация: 28.01.2013
Сообщений: 1
По умолчанию

Цитата:
Сообщение от huzik Посмотреть сообщение
Хм... я, грешным делом, полагал, что работа интерфейса и всяких там просчетов ведется в разных потоках или как-то так. А можно как-то сделать так, чтобы отрисовка прогресса не влияла на производительность полезного кода? Ведь если бы отрисовка действительно так тормозила всю программу, разработчики давно бы уже отказались от всяких красивостей.
Они так и делают, но только своими ручками, так что дерзай!
Whatson вне форума Ответить с цитированием
Старый 11.07.2013, 12:51   #6
Shad0wF1rst
Форумчанин
 
Регистрация: 11.01.2013
Сообщений: 149
По умолчанию

Цитата:
Сообщение от huzik Посмотреть сообщение
Всем спасибо за предыдущие ответы! Все круто работает! Однако столкнулся с очередной проблемой, точнее, недоразумением каким-то.

В общем, есть алгоритм поиска строки в массиве. Он работает мега быстро. Просматривает массив из 43700 элементов меньше, чем за секунду. Но! С прошлой версии алгоритма, когда он работал настолько медленно, что казалось, программа зависла, остался закомментированный ProgressBar. Ради интереса, я его раскомментировал, и, чудо!, алгоритм заработал раз в 10 медленнее. Неужто прогрессбар тормозит выполнение кода?

Прогресс у меня изменяется так: m_srcprg.SetPos(i_dic*100/43700);

Казалось бы, очень простое выражение... У кого какие мысли?
Еще один вариант ускорить программу это выводить в прогресс бар не для каждого байта, а например когда при этом выражении получается целое число, например каждый 437й раз
Может это и чушь, но это моя чушь и я ее никому не отдам.
Shad0wF1rst вне форума Ответить с цитированием
Старый 11.07.2013, 14:53   #7
Кащей
Форумчанин
 
Аватар для Кащей
 
Регистрация: 09.07.2013
Сообщений: 249
По умолчанию

Цитата:
Shad0wF1rst
таки да, слушай этого человека, ты перерисовываеш прогресбар 43700 раз, а мог бы 100. Скорее всего.
do not use your brain
Кащей вне форума Ответить с цитированием
Старый 11.07.2013, 18:17   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от Кащей Посмотреть сообщение
таки да, слушай этого человека, ты перерисовываеш прогресбар 43700 раз, а мог бы 100. Скорее всего.
действия выносятся в отдельный поток, и просто само окно уведомляется что +1 к прогрессу.(через PostMessage к примеру)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ProgressBar mish@ Общие вопросы Delphi 2 27.05.2009 16:56
ProgressBar Makarov Компоненты Delphi 3 04.02.2008 22:42
ProgressBar Rahim1993 Общие вопросы Delphi 10 20.01.2008 21:28
ProgressBar pentiumForever Компоненты Delphi 2 07.09.2007 13:33