问题描述
我想监视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());
这不包括任何清理工作。