在GTK3中的一个项目中,我使用自定义事件在线程之间进行通信。一个线程是运行事件循环的主OS线程。另一个是执行内部应用程序特定初始化的非主线程。条件是,只有在初始化应用程序之后才能创建第一个GTK窗口。但是,由于一些与设计相关的原因,我不想延迟主线程进入事件循环。
因此,主线程在GTK初始化后立即进入事件循环,当可以创建第一个窗口时,非主线程需要插入主线程。对于这些提示,我使用的是GTK3中的自定义事件(可以创建它,但我不确定它是否被推荐)。
创建自定义事件的非主线程的代码片段如下所示-
GdkEvent * createwinevent;
// Create and post custom event to start GTK Window creation
createwinevent = gdk_event_new ((GdkEventType) CREATE_WINDOW);
// CREATE_WINDOW is an enum defined by the application
gdk_event_put (createwinevent);在主线程中,我使用g_idle_timeout间歇性地检查事件队列并处理自定义事件。
然而,在GTK4中,GdkEvents是只读的。可以在GTK4中以某种方式创建定制事件吗?如果没有,我是否可以在GTK4中使用其他机制在线程之间传递消息?
阅读GTK4材料无法找到任何支持自定义事件的东西。
发布于 2022-11-02 11:37:04
阅读从Gtk 3.x迁移到GTK4 (API变化部分):
在GTK 4中不再可能直接访问
GdkEvent结构。GdkEvent现在是一种严格的只读类型,您不能再更改它的任何字段、或构造新事件。所有事件字段都有您必须使用的访问器。
因此,它认为在GTK4中您所做的不再可能。
https://stackoverflow.com/questions/74261368
复制相似问题