Re: questionfor progress bar
- From: "Samuel Cormier-Iijima" <sciyoshi gmail com>
- To: "Van H Tran" <tvhoang1980 yahoo com>
- Cc: gtk-app-devel-list gnome org
- Subject: Re: questionfor progress bar
- Date: Sun, 5 Nov 2006 05:35:53 -0500
Adding the work inside the idle function would work, but would be hard
to implement (state is spread out between function calls, so hard to
debug) and not cross-platform, since I think Linux has only recently
added support for AIO (asynchronous input/output). If you'd rather use
threads, here's a small sample that just updates the progress bar; you
would do the rest of the work (such as reading bits of the file)
inside the thread.
#include <gtk/gtk.h>
GtkWidget *bar;
/**
* this function will be run in the *main thread*, i.e.
* from where gtk_main is running
*/
gboolean
update_callback (gpointer data)
{
gdouble val;
val = (gdouble) GPOINTER_TO_INT (data) / 1000;
/* these are needed, read the documentation on gdk_threads_enter */
gdk_threads_enter ();
gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (bar), val);
gdk_threads_leave ();
return FALSE;
}
gpointer
file_thread (gpointer data)
{
int i;
double val;
for (i = 0; i < 1000; i++) {
/* add the idle function. this works from any thread */
g_idle_add (update_callback, GINT_TO_POINTER (i));
g_usleep (5000);
}
gtk_main_quit ();
}
int
main (int argc, char *argv[])
{
GtkWidget *window;
gtk_init (&argc, &argv);
g_thread_init (NULL);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
bar = gtk_progress_bar_new ();
gtk_container_add (GTK_CONTAINER (window), bar);
gtk_widget_show_all (window);
g_thread_create (file_thread, NULL, TRUE, NULL);
gtk_main ();
}
Hope that helps!
Samuel Cormier-Iijima
On 11/5/06, Van H Tran <tvhoang1980 yahoo com> wrote:
Hi,
--- Kim Jongha <kim jongha gmail com> wrote:
> /* and the for loop */
> double val;
> for(i = 0; i< SOME_NUMBER; i++)
> {
> val = (100.0 /SOME_NUMBER)* i /100.0;
> g_idle_add(show_bar_idle_cb, INT_TO_POINT(val));
> **SOMEWORK**
> }
>
> The problem is that timeout events don't occured
> before finishing
> SOMEWORK(read file with fscanf)
How about adding SOMEWORK inside the g_idle_callback
function?
Cheers,
TranVan Hoang
>
> --------------
> double val = 0;
> g_idle_add(show_bar_idle_cb, INT_TO_POINT(val));
> for(i = 0; i< SOME_NUMBER; i++)
> {
> val = (100.0 /SOME_NUMBER)* i /100.0;
> **SOMEWORK**
> }
> --------------
> upper codes don't work too.
>
> 2006/11/5, Kim Jongha <kim jongha gmail com>:
> > Greeting,
> >
> > progress bar is updated "only" using timeouts ?
> >
> > I read some big file and want to show up the
> progress how much App.
> > read file. so I use progress bar like below
> >
> >
> > double val;
> > for(i = 0; i< SOME_NUMBER; i++)
> > {
> > val = (100.0 /SOME_NUMBER)* i /100.0;
> >
>
gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(pbar),
> val);
> > gtk_widget_show(pbar);
> > }
> >
> > No error, 'val' value is greater than 0.0 less
> than 1.0. but it
> > doesn't work while app. read file. when app read
> file completly, then
> > progress bar filled fully is shown up.
> > I try to use timeouts, and that how can I read
> file.. ?
> >
> > give me a advise, thank you.
> >
> _______________________________________________
> gtk-app-devel-list mailing list
> gtk-app-devel-list gnome org
>
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
>
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list gnome org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]