Gtk ProgressBar, показатель завершенности хода цикла |
Здравствуйте, гость ( Вход | Регистрация )
Gtk ProgressBar, показатель завершенности хода цикла |
Koloyar |
1.6.2011, 20:04
Сообщение
#1
|
Новичок Группа: Сообщений: 3 Регистрация: 1.6.2011 Пользователь №: 2712 Спасибо сказали: 1 раз(а) Репутация: 0 |
Доброго времени суток!
Хочу попросить совета у знающих людей, в связи с возникшей проблемой: Пишу программу на чистом Си. Набросал простенький гтк-шный интерфейс - кнопка запуска, и несколько полей ввода данных. По нажатию кнопки вызывается функция продолжительного расчета (довольно таки долго крутящийся цикл for). Хочется чтобы в момент расчета (от 10 секунд до 5 минут в зависимости от параметров) выводилась вторая формочка с надписью уровня "подождите" и прогрессбаром, который бы двигался пропорционально итеррациям цикла. Если по какой-то причине проще было бы выводить в прогессбар лежащий на главной форме (положу туда если надо будет), то с радостью приму и такой вариант. пример:
Естественно результатом является то, что программа подвисает на время расчета и прогрессбар не двигается, а затем, по окончанию расчета, он сразу заполняется на 100% Очень надеюсь на вашу помощь. |
|
|
RazrFalcon |
1.6.2011, 21:16
Сообщение
#2
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
Или запускать в отдельном потоке обработку. Что бы не вешать гуй.
Или обработку делать прямо во "второй формочке". |
|
|
Koloyar |
2.6.2011, 0:30
Сообщение
#3
|
Новичок Группа: Сообщений: 3 Регистрация: 1.6.2011 Пользователь №: 2712 Спасибо сказали: 1 раз(а) Репутация: 0 |
RazrFalcon, спасибо, что откликнулись! Пробовал запускать во втором потоке, но эффекта было 0, возможно делал что-то не верно. А в чем разница между "запускать обработку во второй формочке" и тем, что "прогрессбар может быть и на главной форме" суть не меняется, а прогресс бар не перерисовывается ?
Не могли бы вы указать примерную логику запуска потока с отработкой функции с долгим циклом, и отсылку из него команды для progressbar'а. |
|
|
RazrFalcon |
2.6.2011, 13:42
Сообщение
#4
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
Ну если нужен гуй и сложная обработка, то обязательно нужен второй поток.
С GTK+ никогда не сталкивался. 1) Нужно создать 2-й поток, независимый от первого. Он выполнит работу, а затем должен вернуть аргументы. Это зависит от Вас конечно. Тогда гуй не зависнет. 2) Вы создаете новую форму, при создании передаете входные данные. На ней же находится прогрессбар. И в ней выполняете свою обработку и двигаете скрол бар этой же формы. Но скорее всего тоже потухнет приложение. 3) Можно сделать обработку в главном окне, а на втором окне, который будет содержать только прогрессбар, двигать его. Тогда зависнет только главная форма. Так обычно и делают. В Qt - это QProgressDialog. Что это в GTK+ без понятия. |
|
|
Koloyar |
2.6.2011, 14:40
Сообщение
#5
|
Новичок Группа: Сообщений: 3 Регистрация: 1.6.2011 Пользователь №: 2712 Спасибо сказали: 1 раз(а) Репутация: 0 |
RazrFalcon, логика поведения мне как раз понятно, у меня были проблемы с реализацией именно на GTK. Но в итоге я справился с проблемой, привожу примерный код: может кому еще пригодится, во всяком случае я больше нигде не встречал рассмотрения GTK progressbara в этом ключе:
|
|
|
Текстовая версия | Сейчас: 24.11.2024, 9:41 |