timer0 temporizadores temporizador interrupciones compiler ccs c timer gtk

temporizadores - GTK Timer-Cómo hacer un temporizador dentro de un marco



timer0 en c (1)

Puede usar g_timeout_add o g_timeout_add_seconds que llamarán a una función de tiempo de espera a intervalos regulares. Tenga en cuenta que esta función de tiempo de espera se puede retrasar debido al procesamiento de eventos y no se debe confiar en el momento preciso. Consulte esta página de desarrollador para obtener más información sobre el ciclo principal.
Aquí hay un ejemplo para comenzar (puede improvisar sobre esto). En el ejemplo, el tiempo de espera se establece en segundos, usando g_timeout_add_seconds , use g_timeout_add si necesita una precisión de milisegundos.

#include <stdio.h> #include <string.h> #include <gtk/gtk.h> /* Determines if to continue the timer or not */ static gboolean continue_timer = FALSE; /* Determines if the timer has started */ static gboolean start_timer = FALSE; /* Display seconds expired */ static int sec_expired = 0; static void _quit_cb (GtkWidget *button, gpointer data) { (void)button; (void)data; /*Avoid compiler warnings*/ gtk_main_quit(); return; } static gboolean _label_update(gpointer data) { GtkLabel *label = (GtkLabel*)data; char buf[256]; memset(&buf, 0x0, 256); snprintf(buf, 255, "Time elapsed: %d secs", ++sec_expired); gtk_label_set_label(label, buf); return continue_timer; } static void _start_timer (GtkWidget *button, gpointer data) { (void)button;/*Avoid compiler warnings*/ GtkWidget *label = data; if(!start_timer) { g_timeout_add_seconds(1, _label_update, label); start_timer = TRUE; continue_timer = TRUE; } } static void _pause_resume_timer (GtkWidget *button, gpointer data) { (void)button;/*Avoid compiler warnings*/ if(start_timer) { GtkWidget *label = data; continue_timer = !continue_timer; if(continue_timer) { g_timeout_add_seconds(1, _label_update, label); } else { /*Decrementing because timer will be hit one more time before expiring*/ sec_expired--; } } } static void _reset_timer (GtkWidget *button, gpointer data) { (void)button; (void)data;/*Avoid compiler warnings*/ /*Setting to -1 instead of 0, because timer will be triggered once more before expiring*/ sec_expired = -1; continue_timer = FALSE; start_timer = FALSE; } int main(void) { GtkWidget *window; GtkWidget *vbox; GtkWidget *start_button; GtkWidget *pause_resume_button; GtkWidget *reset_button; GtkWidget *quit_button; GtkWidget *label; gtk_init(NULL, NULL); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL); vbox = gtk_vbox_new (FALSE, 2); gtk_container_add(GTK_CONTAINER(window), vbox); label = gtk_label_new("Time elapsed: 0 secs"); start_button = gtk_button_new_with_label("Start"); g_signal_connect(G_OBJECT(start_button), "clicked", G_CALLBACK(_start_timer), label); pause_resume_button = gtk_button_new_with_label("Pause/Resume"); g_signal_connect(G_OBJECT(pause_resume_button), "clicked", G_CALLBACK(_pause_resume_timer), label); reset_button = gtk_button_new_with_label("Reset"); g_signal_connect(G_OBJECT(reset_button), "clicked", G_CALLBACK(_reset_timer), label); quit_button = gtk_button_new_with_label("Quit"); g_signal_connect(G_OBJECT(quit_button), "clicked", G_CALLBACK(_quit_cb), NULL); gtk_box_pack_start (GTK_BOX(vbox), label, 0, 0, 0); gtk_box_pack_start (GTK_BOX(vbox), start_button, 0, 0, 0); gtk_box_pack_start (GTK_BOX(vbox), pause_resume_button, 0, 0, 0); gtk_box_pack_start (GTK_BOX(vbox), reset_button, 0, 0, 0); gtk_box_pack_start (GTK_BOX (vbox), quit_button, 0, 0, 0); gtk_widget_show_all(window); g_timeout_add_seconds(1, _label_update, label); continue_timer = TRUE; start_timer = TRUE; gtk_main(); return 0; }

¡Espero que esto ayude!

¿Cómo funciona g_timer_new?

es posible hacer un

char timerz[50]; GTimer *timer g_timer_start(GTimer *timer); strcpy(timerz,(g_timer_elapsed(GTimer *timer))

¿O qué podría hacer para tener un temporizador en un gtk_frame ???

¡Que tengas un buen día! :RE