Re: How to use thread???
- From: Chris Vine <chris cvine freeserve co uk>
- To: gtk-list gnome org
- Cc:
- Subject: Re: How to use thread???
- Date: Sun, 9 Apr 2006 10:58:55 +0100
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
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]