FLTK值的更改和重绘一直等到回调之后:有办法解决这个问题吗



我是GUI的新手,正在学习FLTK以便生成多平台应用程序。在应用程序中,用户单击按钮并通过回调调用一个耗时的函数。由于这需要很长时间,我想随着功能的进展更新输出小部件。因此,我将指针传递给Fl_Ouput小部件,并使用小部件->value(x)和小部件->redraw()进行更新。然而,小部件只有在整个回调函数完成时才会重新绘制,这使得整个事情毫无意义,因为它不会实时更新用户。代码的形式为:

void calculate(Fl_Widget* widget,Fl_Output* op){
/*function call to actual code but contains inside a loop:*/
stringstream progress;
progress<<p; //where p is some percentage calculated on the fly in the function
op->value(progress.str().c_str());
op->redraw();
}
int main(){
/*main and GUI code*/
Fl_Output* op = new Fl_Output(100,50,100,10,0);
Fl_Button* go = new Fl_Button(100,100,10,10,"Go");
go->callback((Fl_Callback*) calculate,op);
/*rest of GUI code and main*/     
}

我的问题是,当我希望op指向的小部件时,当调用op->refresh()时,它并没有按顺序重新绘制,而是只有在calculate中的其余代码执行完毕之后,或者,正如我所怀疑的,当控件在完成执行时离开回调函数时。

我的问题是:当这样的小部件的值发生变化时,在执行更多代码之前(可能是在将控制权传递给函数时),有什么方法可以实时更新它吗?或者有更好的方法吗?

谢谢,

R。

我想您没有向我们展示问题实际出现的实际C++代码,所以我的第一个猜测是您在GUI循环中进行长时间运行的处理,这总是一个坏主意。

要查看一个几乎惯用的FLTK解决方案,请查看测试目录中的线程示例(您需要对FLTK源代码进行编程-最好浏览一下那里的所有FLTK示例-这就是我近20年前学习FLTK的方式)。

FLTK手册在本页涉及多线程主题:http://www.fltk.org/doc-1.3/advanced.html。

相关内容

最新更新