加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

GTK呼叫功能每x秒

发布时间:2020-12-16 10:10:56 所属栏目:百科 来源:网络整理
导读:所以我正在为现有的c应用程序编写一个gui. gui只是一个简单的界面,它只显示并且不会真正将任何信息反馈到应用程序中.但是如果有一些新信息,我需要检查一个链表. 现在我不想使用另一个线程手动运行该功能来执行此操作. 有没有办法’破解’定时函数或回调到GTK
所以我正在为现有的c应用程序编写一个gui.

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

现在我不想使用另一个线程手动运行该功能来执行此操作.

有没有办法’破解’定时函数或回调到GTK主循环?这样我的函数每秒调用一次或类似的东西.当然我的功能是非阻塞的.

我在写c.

解决方法

GTK包括glib. glib是gtk和许多其他gobject库使用的核心算法和数据结构库. glib提供将从mainloop调用的函数.包含gtk时包含glib.

您需要将GSourceFunc作为回调GSourceFunc isgboolean的签名
(* 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(回调函数)的指针,第三个参数是指向要传递给回调函数的数据的指针.

编辑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以获取更多信息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读