gpt4 book ai didi

C GTK+ 启动时的事件信号

转载 作者:行者123 更新时间:2023-11-30 16:02:09 25 4
gpt4 key购买 nike

我正在写一个倒计时器。它由一个带有标签的窗口组成,其中显示时间。 “timer()”(在下面的代码中)作为线程生成。这在linux环境下工作得很好,但据我所知GTK不支持windows下的多线程(如果我错了请纠正我)。是否可以在不使用线程的情况下生成“timer()”,例如当 main_window 出现时调用信号?

#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <string.h>
#include <pthread.h>
#include <gtk/gtk.h>

GtkWidget *window;
GtkWidget *label;
pthread_t timer_thread;

void* timer()
{
while(1)
{
// some code here to calculate time
gtk_label_set_markup ((GtkLabel*)label, time_c);
sleep(1);
}
}

static gboolean delete_event( GtkWidget *widget, GdkEvent *event, gpointer data )
{
return FALSE;
}

static void destroy( GtkWidget *widget, gpointer data )
{
gtk_main_quit ();
}

int main(int argc, char **argv)
{
g_thread_init(NULL);
gdk_threads_init();
gdk_threads_enter();
gtk_init (&argc, &argv);

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

g_signal_connect (window, "delete-event", G_CALLBACK (delete_event), NULL);
g_signal_connect (window, "destroy", G_CALLBACK (destroy), NULL);

label = gtk_label_new("");

gtk_container_add (GTK_CONTAINER (window), label);
gtk_widget_show (label);
gtk_widget_show (window);

pthread_create(&timer_thread, NULL, timer, NULL);

gtk_main ();
gdk_threads_leave();
return 0;
}

我尝试这样做,timer() 正确生成,但主窗口从未出现:

    static void timer( GtkWidget *widget, gpointer data )
{
while(1)
{
g_print("something"); //for checking
// some code here to calculate time
gtk_label_set_markup ((GtkLabel*)label, time_c);
sleep(1);
}
}

int main(int argc, char **argv)
{
g_signal_connect (window, "show", G_CALLBACK (timer), NULL);
}

提前致谢!

最佳答案

为此,您最好使用计时器。查看g_timeout_add 。这里有一个例子:GTK+ events and signals .

关于C GTK+ 启动时的事件信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5610582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com