события — PHP GTK обновляет графический интерфейс

Я пытался сделать очень простое приложение PHP, используя php-gtk. Программа выполняет некоторую обработку и выводит статус этого процесса. Проблема в том, что приложение не запускается, пока процесс не завершится.
Я прочитал, что строка while (Gtk::events_pending()) {Gtk::main_iteration();} позволяет продолжить основной цикл во время обработки, но он не работает для меня.
Вот код:

<?php
if(!class_exists('gtk')){
exit('php-gtk2!!');
}

$wnd = new GtkWindow();
$wnd->set_size_request(400, 200);
$wnd->set_title('test');
$wnd->connect_simple('destroy', array('gtk', 'main_quit'));

$lbl = new GtkLabel('1/3');

function processing($lbl){
while (Gtk::events_pending()) {Gtk::main_iteration();}
sleep(2);
$lbl->set_text('2/3');
sleep(2);
$lbl->set_text('3/3');
}

processing($lbl);

$wnd->add($lbl);
$wnd->show_all();
Gtk::main();

?>
Я пытался разместить эту строку везде в коде, и я не уверен, почему она не работает.
Любая помощь могла бы быть полезна. Заранее спасибо!

(Обратите внимание sleep функция только для имитации какой-то тяжелой обработки)

0

Решение

Поскольку вы пытаетесь выполнять работу одновременно с работой вашего графического интерфейса, вам нужно будет использовать второй поток, связывающийся из этого потока с потоком графического интерфейса для получения обновлений графического интерфейса. Для этого используйте gdk_threads_add_idle() или же g_idle_add() функции. Не вызывайте функции GTK + напрямую из другого потока!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]