首页 > 解决方案 > 创建 gtk 信号以编辑在其他线程中运行的 GtkWidget

问题描述

标签: cpthreadsgtksignals

解决方案


必须自己解决这个问题,根本不需要使用信号。

GTK 的主线程是一个线程,gtk_main()从中调用。禁止在其主线程之外访问任何 GTK 对象。因此,要为我使用的 GTK GUI 启动一个线程,g_thread_new()g_idle_add(print_demo_message, msg)“要求”GTK 主线程将其粘贴msgGtkTextView.

所以,现在它看起来像这样:

APP MAIN THREAD:

if(%some_condition%){
     msg = malloc(256);
     sprintf(msg, "Some text");
     g_idle_add(print_demo_message, msg);
}

GUI THREAD:

boolean print_demo_message(gpointer data)
{
    gchar* message = data;
    g_print("Got message: %s\n", message);
 ...
}

消息传输OK,像魅力一样工作:)


推荐阅读