gpt4 book ai didi

c - GTK+ 每隔 x 秒调用一次函数

转载 作者:太空狗 更新时间:2023-10-29 15:50:24 26 4
gpt4 key购买 nike

所以我正在为现有的 c 应用程序编写一个图形用户界面。

gui 只是一个简单的界面,它只会显示而不会真正向应用程序反馈任何信息。但是如果有一些新信息可用,我需要检查一个链表。

现在我不想使用另一个线程来手动运行函数来执行此操作。

有没有办法将定时函数或回调“破解”到 GTK 主循环中?这样我的函数每秒或类似的东西被调用一次。当然我的函数是非阻塞的。

我正在用 c 语言编写。

最佳答案

GTK 包含 glib。 glib 是 gtk 和许多其他 gobject 库使用的核心算法和数据结构库。 glib 提供将从主循环调用的函数。当您包含 gtk 时,glib 也包含在内。

您需要有一个 GSourceFunc 作为回调 GSourceFunc 的签名是gboolean
(*GSourceFunc) (gpointer user_data);

gboolean YourCallBack(void* data)
{
GSList list = (GSList*) data;
// Check your list
return TRUE; // return FALSE to remove the timeout
}

你必须在其他地方注册函数:

GSList* List; //This is a singly linked list provided by glib as well.
g_timeout_add_seconds(1, YourCallBack, List);

g_timeout_add 的第一个参数是回调函数每次调用之间的秒数,第二个是指向 GSourceFunc(回调函数)的指针,第三个参数是指向要传递给回调函数的数据的指针.

edit GSlist 通常是指向列表中的一个节点(第一个)的指针,因为列表可以更改,节点可以添加到列表中或从列表中删除,这是危险的。尽管此示例显示了如何使用 g_timeout_add_seconds,但您需要一种更安全的方式来访问您的列表,然后我将在此处介绍。然而,这确实展示了如何使用 g_timeout_add_x 系列函数的机制。

编辑:您可以使用 g_timeout_add 为比秒更小的间隔指定回调,但如果您不需要这样的精度,g_timeout_add_seconds 会消耗更少的资源。

参见:https://developer.gnome.org/glib/2.42/glib-The-Main-Event-Loop.html#g-timeout-add获取更多信息。

关于c - GTK+ 每隔 x 秒调用一次函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27740337/

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