2010-10-18 2 views
1

Какой смысл делать Gtk::Main::iteration() на последних двух строках ответа на this question? Я использую pygtk, так что эквивалентный вопрос будет, почему gtk.main_iteration_do()? Не работает ли уже основной цикл, который уже занимается этим?gtk: почему Gtk :: Main :: Итерация?

ответ

3

Когда я написал этот ответ, я предполагал, что элементы будут добавлены в длинный цикл - например, в обратном вызове. Если вы явно не выполняете работу в отдельном потоке, тогда основной цикл на самом деле не работает во время этого кода. Код там говорит окну прокручивать вниз, но прокрутка только на самом деле происходит, когда основной цикл восстанавливает управление.

«Пока события не ожидаются, выполняйте основное вмешательство» на любом языке, который часто используется для запуска основного цикла до тех пор, пока все ожидающие обновления графического интерфейса не будут обработаны.

+0

oh Я думаю, что вижу ... так что если я добавляю около 2500 элементов в древовидную структуру, и после добавления каждого элемента я запускаю основной цикл, как в ответе, то он не замерзнет за X секунд требуется, чтобы добавить их все? – Claudiu

+0

@Claudiu, справа. – ptomato

+0

аккуратный, который отвечает на вопрос, которого я не знал. и это тоже – Claudiu

2

Эти функции существуют, чтобы вы могли создать свой собственный цикл и иметь итерацию цикла цикла GTK где-то в нем.

Возможно, вы захотите позаботиться о других вещах во время цикла, в том же потоке/процессе, что и цикл. Многие библиотеки с основными циклами предоставляют либо способ планирования задач в своем основном цикле, либо функцию для запуска одиночной итерации цикла, чтобы вы вставляли где-то еще.