On Sunday 09 April 2006 09:46, sahlot arvind wrote: > Hello All, > I tried to create a thread in a simple gtk program but I am getting an > error.... > Actually wat I wanted to do is that , I want some rectangles to be drawn > side by side in a plot area but wid a time gap of 1 second each, so that > we can see actual simulation of drawing.. first i simply put a sleep() > function in my code but that didnt wrk rather program run for few seconds > without drawing anything and then drew all rectangles alltogether.... now i > am trying to create a thread so that this thread can run in background and > can print rectangles after 1 sec. each but i am getting an error..... my > code is below, someone please help me in this regard as soon as possible > ,its very urgent for my academic project... > > > /**************************CODE*************************************/ > > #include <gtk/gtk.h> > #include <glib.h> > > > #define NO_PADDING 0 > #define NO_SPACING 0 > #define width 40 > #define height 40 > > > > char val[20]; > > > > > char *inttostr(int num) > { > int i; > int j; > char ch; > int dig; > i = 0; > if(num == 0) > { > val[0] = '0'; > val[1] = '\0'; > return val; > } > while(num != 0) > { > dig = num%10; > val[i] = dig + '0'; > num = (num - dig)/10; > i++; > } > val[i] = '\0'; > for(j = i - 1, i = 0; i < j; j--, i++) > { > ch = val[i]; > val[i] = val[j]; > val[j] = ch; > } > return val; > } > > > > /* Callbacks */ > > /************************************************************************** >/ > > > int draw_array( GtkWidget *where_to_draw ) > { > gint count_size; > gint x = 40,y = 120; > GdkGC *array_gc; > array_gc = where_to_draw->style->black_gc; > gchar *size,*dstype; > > gdk_draw_string(where_to_draw->window,where_to_draw->style->font, > array_gc,10,20,"ARRAY"); > gdk_draw_string(where_to_draw->window,where_to_draw->style->font, > array_gc,10,35,"INTEGER"); > > for(count_size=0;count_size<6;count_size++) { > gdk_draw_rectangle(where_to_draw->window,array_gc,FALSE,x,y,width,height); > //sleep(1); > gdk_draw_string(where_to_draw->window,where_to_draw->style->font, > array_gc,x+width/2,y+60,inttostr(count_size)); > x+=width; > } > return ( TRUE ); > } > > > > void print_screen(GtkWidget *widget,GtkWidget *where_to_draw ) > { > //draw_array(where_to_draw); > g_thread_create(draw_array, where_to_draw,FALSE, NULL); > > } > > /*------------------------------------------------------------------------* >/ void print_and_quit( GtkButton *was_clicked, gpointer user_data ) > { > /* Use glibs printf equivalent to print a message */ > g_print( "Thank you for using this program.\n"); > gtk_main_quit(); > } > > gboolean delete_event_handler( GtkWidget *widget, GdkEvent *event, > gpointer user_data ) > { > /* Received closure from the window manager */ > g_print("The window manager is asking to close this application\n"); > return( FALSE ); /* FALSE - do not prevent closure */ > } > > > > > > /******************************************************/ > > > > int main( int argc, char *argv[] ) > { > GtkWidget *top_widget; > GtkWidget *vbox, *menu_bar, *file_item, *file_menu, *exit_item; > GtkWidget *plot_area; > GtkWidget *plot_item; > GtkWidget *help_item,*array1D; > > > /* 1. Initialize the environment */ > gtk_init( &argc, &argv ); > > /* 2a. Create widgets */ > top_widget = gtk_window_new( GTK_WINDOW_TOPLEVEL ); > vbox = gtk_vbox_new( FALSE, NO_SPACING ); > menu_bar = gtk_menu_bar_new( ); > > /* Create the File item and its menu */ > file_item = gtk_menu_item_new_with_label( "File" ); > file_menu = gtk_menu_new(); > array1D = gtk_menu_item_new_with_label("Array"); > exit_item = gtk_menu_item_new_with_label( "Exit" ); > > /* Create the Plot item */ > plot_item = gtk_menu_item_new_with_label( "Plot" ); > > /* Create the Help item */ > help_item = gtk_menu_item_new_with_label( "Help" ); > > /* Create the Work Area */ > plot_area = gtk_drawing_area_new(); > > /* 2b. Set Attributes */ > gtk_window_set_title( GTK_WINDOW( top_widget ), "DSDe" ); > gtk_drawing_area_size( GTK_DRAWING_AREA(plot_area), 800, 400 ); > > /* 3. Registering Callback routines */ > gtk_signal_connect( GTK_OBJECT( top_widget ), "delete_event", > GTK_SIGNAL_FUNC(delete_event_handler), NULL ); > gtk_signal_connect( GTK_OBJECT( top_widget ), "destroy", > GTK_SIGNAL_FUNC(print_and_quit), NULL ); > gtk_signal_connect( GTK_OBJECT( exit_item ), "activate", > print_and_quit, NULL ); > > gtk_signal_connect( GTK_OBJECT( array1D ), "activate", > print_screen, plot_area ); > > /* 4. Defining the Instance Hierarchy */ > gtk_container_add( GTK_CONTAINER( top_widget ), vbox ); > gtk_box_pack_start( GTK_BOX(vbox), menu_bar, FALSE, FALSE, NO_PADDING); > gtk_box_pack_start( GTK_BOX(vbox), plot_area, FALSE, FALSE, NO_PADDING > ); > > /* Pack the Menu Bar and move Help to Far Right */ > gtk_menu_bar_append( GTK_MENU_BAR( menu_bar ), file_item ); > gtk_menu_bar_append( GTK_MENU_BAR( menu_bar ), plot_item ); > gtk_menu_bar_append( GTK_MENU_BAR( menu_bar ), help_item ); > gtk_menu_bar_append( GTK_MENU_BAR( menu_bar ), array1D ); > gtk_menu_item_right_justify( GTK_MENU_ITEM( help_item ) ); > > /* Attach and pack the menus */ > gtk_menu_item_set_submenu( GTK_MENU_ITEM( file_item ), file_menu ); > gtk_menu_append( GTK_MENU(file_menu), exit_item ); > > /* 5. Showing the Widgets */ > gtk_widget_show_all( top_widget ); > > /* 6. Processing Loop */ > gtk_main(); > g_print( "Bye!\n"); > return 0; > } > > /*******************************************END OF > CODE*******************************/ > > command used and error which I am getting while compilation is .. > [root@arvind Desktop]# gcc thread.c -o run `gtk-config --libs --cflags` pkg-config --libs --cflags gtk+-2.0 gthread-2.0 > /tmp/ccoiba3m.o(.text+0x1f4): In function `print_screen': > : undefined reference to `g_thread_create' > > collect2: ld returned 1 exit status _______________________________________________ gtk-list@xxxxxxxxx http://mail.gnome.org/mailman/listinfo/gtk-list