每x分钟更新一次变量

时间:2014-02-27 16:50:43

标签: c ipc glib

我有一个小程序,它使用glib。 你可以在codereview中看到它。标题是“阅读信息。什么可以做得更好?”。 我在main方法中有一个无限循环。 在这个循环中,我有一个GTree。

int main()
{
  //some setup/mallocs
  GTree* t = g_tree_new_full((GCompareDataFunc)g_ascii_strcasecmp,NULL,free_data,free_data);
  while (1) {
     //some tasks; accessing tree   
  } 
  //some free
}

在此循环内访问树。 我希望每隔x分钟(例如每15分钟)更新一次这棵树。 可能吗?我该怎么做并避免碰撞?

1 个答案:

答案 0 :(得分:2)

不要在代码中执行while(1){...},而是使用GLib's main event loop。除了使这更容易之外,它还允许您与其他基于主循环的代码集成,例如GTK +,GIO和其他库中的异步函数。

gboolean every_15_minutes (gpointer user_data) {
  /* some tasks; accessing tree */
}

int main (void) {
  GMainLoop* loop = g_main_loop_new (NULL, FALSE);
  /* some setup/mallocs */
  GTree* t = g_tree_new_full((GCompareDataFunc)g_ascii_strcasecmp,NULL,free_data,free_data);
  g_timeout_add_seconds (60 * 15, every_15_minutes, NULL);
  g_main_loop_run (loop);
  /* some free */
}

至于避免碰撞,您可以g_tree_lookup执行g_tree_insert以确认在g_tree_replace之前没有任何现有条目使用该密钥,或者仅执行{{3}}将丢弃该密钥如果发生碰撞,则为旧值。