2016-08-04 19 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機能は一部だけ重い処理をシミュレートすることである)

答えて

0

あなたのGUIが実行されていると同時に仕事をしようとしているので、あなたはから通信し、第二のスレッドを使用する必要がありますそのスレッドをGUIスレッドに渡してGUIの更新を取得します。これを行うには、gdk_threads_add_idle()またはg_idle_add()関数を使用します。 他のスレッドから直接GTK +関数を呼び出さないでください!

+0

ありがとうございました!私はそれらの2つの機能について知らなかった – gabyarg25

関連する問題