|
我用的是gtk1.2, 主线程是在一个窗口菜单选项中选择载入文件,打开另一个窗口,并在其中选择了相应文件之后,按确定键开始解析文件信息,因为文件过大解析时间会比较长,界面会一直处于挂死状态,需要用一个滚动条来告诉用户正在解析文件,否则会误认为程序已经死掉了。想在解析之前*出一个滚动条,一直是滚动状态,然后开始解析,完成之后关掉滚动条。但是目前的问题是,点击确定之后总是先解析文件,界面挂死状态,解析完成之后滚动条才*出。看论坛帖子中提到过类似问题要用gdk_threads_enter, gdk_threads_leave, 用多线程的方式来解决,但是不知道具体应该怎么用,而且gtk1.2本身API也有很大的限制行,哪位大侠能给点指示么?
程序样式大概如此:
void *show_progressbar(void *args)
{
......
gtk_widget_show(window);
......
}
int xxxx::OnEvent(GtkWidget *widget, const char *name, gpointer user_data)
{
if (!strcmp(name, "Openfile"))
{
pthread_create(..., ..., show_progressbar, ...);
if (-1 = Parsefiles())
{
return 0;
};
}
......
return 0;
} |
|