Я пытаюсь добавить gtkProgressBar
к небольшому интерфейсу, который я создал для скрипта R (используя пакет RGtk2
).
Если я сделаю что-то простое, как:
for (i in 1:50)
{
gtkProgressBarSetFraction(progress, i/50)
Sys.sleep(1)
}
все работает гладко, и бар обновляется каждую секунду.
Однако, когда я перехожу к своему фактическому коду, у меня есть цикл, в котором я делаю что-то вроде
for(i in 1:1000)
{
gtkProgressBarSetFraction(progress, i/1000)
#do some heavy computation here
}
Проблема здесь в том, что интерфейс «зависает», а индикатор выполнения обновляется только в конце цикла, поэтому полностью отказывается от его использования ...
Я что-то здесь упускаю?Как я могу периодически "пробуждать" интерфейс, чтобы он обновлялся?
Спасибо nico
EDIT : ОК, я решил проблему, но я все еще не 'не понимаю, что происходит.Я добавил Sys.sleep
вызов после gtkProgressBarSetFraction
, и теперь интерфейс обновляется счастливо.Чтобы уменьшить «потерянное время», я просто сделал Sys.sleep(0.0001)
(так что для 1000 циклов у меня было бы только ~ 0,1-1 с больше вычислительного времени, что приемлемо).Кто-нибудь может объяснить, почему это происходит?