如何监视Gtk3事件循环延迟

问题描述

我想监视Gtk3事件循环的延迟,即Gtk主事件循环的每次迭代所花费的时间。基本上,这个想法是在主事件循环的每个时刻运行一个自定义函数。

我尝试了g_idle_add,但是尚不清楚文档是否在每个循环中调用

有什么想法吗?

解决方法

最好编写一个自定义GSource

GSource *
g_source_new (GSourceFuncs *source_funcs,guint struct_size);

指定大小以允许创建从GSource派生的包含其他数据的结构

您还应该给它最高优先级。 我不确定会在每次迭代中分派它,但是会在每次迭代中prepared上分派它。要使您的source栩栩如生,您可以使用g_main_loop_get_context获取上下文并致电g_source_attach

总的来说,看起来像这样:

// struct MySource
// {
//  struct GSource glib;
//  int            my_data;
// };


gboolean my_prepare (GSource *source,gint    *timeout_)
{
  g_message ("%li",g_get_monotonic_time());
  *timeout_ = 0;
  (MySource*)source->my_data = 1;
  return TRUE;
}


GSourceFuncs funcs = {.prepare = my_prepare};

GSource *src = g_source_new (&funcs,sizeof (MySource));
g_source_set_priority (src,G_PRIORITY_HIGH);
g_source_attach (src,g_main_loop_get_context());

这不包括任何清理工作。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...