我一直在尝试使用php-gtk创建一个非常简单的PHP应用程序。该程序进行一些处理并输出该过程的状态。问题是应用程序在进程完成之前不会启动。
我读到行import React from 'react';
// import your helper!
class Home extends React.Component {
componentDidMount() {
helper.get('/api/posts').then((data) => {
this.setState({posts: data})
});
}
render() {
return (
<div className="welcome">
{this.state.posts.map((post, idx) => <PostItem post={post} key={"post " + idx} />)}
</div>
)
}
}
允许主循环在处理时继续,但它对我不起作用。
这是代码:
while (Gtk::events_pending()) {Gtk::main_iteration();}
&GT?; 我尝试在代码上的任何地方放置该行,我不确定它为什么不起作用。 任何帮助将非常感激。提前谢谢!
(注意:<?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();
函数只是为了模拟一些繁重的处理)
答案 0 :(得分:0)
由于您在GUI运行的同时尝试工作,因此您需要使用第二个线程,从该线程传递到GUI线程以获取GUI更新。为此,请使用gdk_threads_add_idle()
或g_idle_add()
功能。 不要直接从其他线程调用GTK +函数!