2016-08-04 5 views
0

나는 php-gtk를 사용하여 매우 간단한 PHP 응용 프로그램을 만들려고 노력해 왔습니다. 프로그램은 일부 처리를 수행하고 해당 프로세스의 상태를 출력합니다. 문제는 프로세스가 완료 될 때까지 응용 프로그램이 실행되지 않는다는 것입니다. 나는 while (Gtk::events_pending()) {Gtk::main_iteration();} 라인이 처리하는 동안 메인 루프가 계속되는 것을 허용하지만 그것은 나를 위해 작동하지 않는다는 것을 읽었다. ? 여기에 코드입니다 :PHP GTK GUI 새로 고침

<?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 기능이 일부 무거운 처리 시뮬레이션 아니라) 당신이 당신의 GUI가 실행과 동시에 일을하려고하기 때문에

답변

0

을, 당신은 두 번째 스레드를 사용해야에서 통신합니다 그 스레드를 GUI 스레드로 가져 와서 GUI 업데이트를 얻으십시오. 이렇게하려면 gdk_threads_add_idle() 또는 g_idle_add() 함수를 사용하십시오. 다른 스레드에서 직접 GTK + 함수를 호출하지 마십시오!

+0

감사합니다. 나는이 두 가지 기능에 대해 몰랐다. – gabyarg25