gtk3 - 如何监控 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());
这不包括任何清理。
推荐阅读
- leaflet - 用传单显示geojson文件的问题
- adp - 是否有 ADP API 接口以编程方式创建病假?
- java - 为什么 Java JMenubar 变黑了?
- r - Nelson Siegel 估计使用差分演化进行许多观测
- python - 如何获取python中列的每个类别的计数?
- r - data.table R按组求和分隔的行
- python - Python中的虚拟数字生成器
- c++ - std::min vs ternary gcc auto vectorization with #pragma GCC optimize ("O3")
- mongodb - 在 Loopback 4 中,想从 Swagger Explorer 中隐藏 {"additionalProp1": {}}?
- javascript - 从子域 Express.js 发送图像