| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 
 | #include <gtk/gtk.h>
#include <gdk/gdk.h>
 
#include <stdio.h>
 
int annuler = 0;
int stop = 0;
 
gpointer threadwhile(gpointer data) {
  GtkButton * b = (GtkButton*) data;
  int count = 0;
  char buffer[100];
 
    while(1) {
      if(stop == 1) break;
      printf("\n test %d",count);
      sprintf(buffer,"test %d",count);
      gdk_threads_enter();
      gtk_button_set_label(b,buffer);
      gdk_threads_leave();
      count ++;
    }
    annuler = 0;
    stop = 0;
    return FALSE;
}
 
void on_button_clicked(GtkButton * button, gpointer data) {
 
  if(annuler == 1) stop = 1;
  else {
    g_thread_new(NULL,threadwhile,button);
    annuler = 1;
  }
}
 
 
GtkWidget * create_window1() {
  GtkWidget * window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title (GTK_WINDOW (window1), "test gtk3");
 
  GtkWidget * vbox12 = gtk_vbox_new (FALSE, 0);
  gtk_widget_show (vbox12);
  gtk_container_add (GTK_CONTAINER (window1), vbox12);
 
  GtkWidget * button = gtk_button_new();
  gtk_button_set_label(GTK_BUTTON(button),"compile");
  g_signal_connect ((gpointer) button, "clicked",
                    G_CALLBACK (on_button_clicked),
                    NULL);
  gtk_widget_show (button);
  gtk_container_add (GTK_CONTAINER (vbox12), button);
 
  return window1;
}
 
 
int main(int argc, char *argv[]) {
 
  gdk_threads_init ();
  gdk_threads_enter ();
 
  gtk_init (&argc, &argv);
 
  GtkWidget * window1 = create_window1 ();
  gtk_widget_show (window1);
  g_signal_connect ((gpointer) window1, "destroy", G_CALLBACK(gtk_main_quit), NULL);
 
  gtk_main ();
  gdk_threads_leave();
} | 
Partager