LINUX.ORG.RU

Ответ на: комментарий от Qathos

Попробуй обновлять родительский виджет.

Пробовал, не помогает

pihter ★★★★★
() автор топика
Ответ на: комментарий от yoghurt

Надо прокручивать GMainLoop для таких вещей

Как?

pihter ★★★★★
() автор топика
Ответ на: комментарий от ananas

gtk_label_set_text/g_timeout_add_full

Не то. у меня операция, которая занимает до нескольких секунд, она состоит из нескольких этапов, хотел о них пользователю докладывать через изменения текста лабелки. а оно виснет и показывает только последнее, когда уже все закончится

pihter ★★★★★
() автор топика

Если ты так надолго блокируешь майн луп, то возможно имеет смысл вынести операцию на соседний тред и оттуда кидать обновления уи. Только не прямыми вызовами, естественно, а через https://mail.gnome.org/archives/gtk-app-devel-list/2007-June/msg00035.html и с дебаунсом, чтобы не спамить очередь.

В винде всегда раздражали диалоги обработки больших деревьев с файлами по 0.5кб. Давно бы уже скопировалось/нашлось все, но программа старательно выводит каждое сраное имя из 15000 на экран, и это занимает больше времени, чем сама операция. Как будто юзер успеет их все прочитать.

anonymous
()
Ответ на: комментарий от pihter

Думаю он предлагает тебе рвать процесс на коллбеки, как это вебмакаки делают в асинк/авайте. Тут вполне применимо, если ты против тредов.

anonymous
()
Ответ на: комментарий от anonymous

Если ты так надолго блокируешь майн луп

Вообще нет: я сознательно гиперболизировал задачу чтоб посмотреть что теоритически будет при самых больших трудностях на самых медленных файлах. То что ты предлагаешь — анти-KISS-ионно. Тут задачка проходная, проще фриз оставить, по крайней мере пока. Есть работа поважнее на данном этапе.

pihter ★★★★★
() автор топика
Ответ на: комментарий от anonymous

если ты против тредов.

я не против. но это из пушки по воробьям. из-за обновления лабелки тред заводить — шла она в жопу )

pihter ★★★★★
() автор топика
Ответ на: комментарий от pihter

Там операционно ничего сложного же, ну дело твое. Ради кнопки отмены еще можно, если процесс долгий, связан с интернетами например.

anonymous
()
Ответ на: комментарий от anonymous

Там операционно ничего сложного же

да я умею )

если процесс долгий, связан с интернетами например.

не. не с интернетами. я искусственно усложнил в 800 раз и занимает ну секунды 4. до отмены точно не дойдет

pihter ★★★★★
() автор топика
Ответ на: комментарий от jo_b1ack

попробовал первым делом. и родительский

pihter ★★★★★
() автор топика

По канону нужно длинную операцию разбивать на итерации и сувать в главный цикл, чтобы они обрабатывались поочередно с прорисовкой. Ну там какое-нить g_idle_add_full(G_PRIORITY_HIGH_IDLE, iteration, object, nil), можно еще докинуть g_timeout_add_full, чтобы вдруг не повисло.
Вложенный главный цикл - зло, так можно делать только для отладки.

byko3y ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.