gpt4 book ai didi

c - 使用 dconf 监视回调

转载 作者:行者123 更新时间:2023-11-30 16:00:40 26 4
gpt4 key购买 nike

我正在尝试在 Ubuntu 11.04 中使用 dconf api 捕获后台更改事件。我已经创建了一个客户端并且可以读取背景值,但是当我更改 dconf 值(通过 dconf-editor)时,不会调用回调函数。

我应该如何使用回调技术?

谢谢。

这是代码:

 #include <glib-2.0/glib.h>
#include <glib-2.0/glib-object.h>
#include <glib-2.0/gio/gio.h>
#include </usr/include/dconf/dconf.h>
#include <iostream>

void WatchBackground (DConfClient *client, const gchar* path, const gchar* const *items, gint n_items, const gchar* tag, gpointer user_data){

if (g_strcasecmp(path, (gchar*)"/org/gnome/desktop/background/picture_uri") == 0){
std::cout << "filename Ok" << std::endl;
}
std::cout << "Call callback" << std::endl;
}

int main(int argc, char** argv) {
g_type_init();

DConfClient *dcfc = dconf_client_new(NULL, WatchBackground, NULL, NULL);
if (dcfc != NULL){
std::cout << "DConfClient created." << std::endl;
GVariant *res = dconf_client_read(dcfc, (gchar*)"/org/gnome/desktop/background/picture-uri");
if (res != NULL){
gsize s = 0;
std::cout << "/org/gnome/desktop/background/picture-uri: " << g_variant_get_string(res, &s) << std::endl;
} else {
std::cout << "NULL read" << std::endl;
}
}

while(true){
sleep(1000);
}

return 0;
}

这是执行该程序的结果:

(process:6889): GLib-WARNING **: XDG_RUNTIME_DIR variable not set.  Falling back to XDG cache dir.
DConfClient created.
/org/gnome/desktop/background/picture-uri: /usr/share/backgrounds/space-02.png

最佳答案

您必须使用GMainLoop来等待。这是一个简单的代码来演示。

#include <dconf.h>

void watch(DConfClient *c,
const gchar *p,
const gchar * const *i,
gint n,
const gchar *t,
gpointer unused)
{
g_message("%s", p);
}

int main(int argc, char *argv[])
{
DConfClient *c;
GMainLoop *l;

g_type_init();

c = dconf_client_new(NULL, watch, NULL, NULL);
dconf_client_watch(c, "/", NULL, NULL);

l = g_main_loop_new(NULL, FALSE);
g_main_loop_run(l);

return 0;
}

关于c - 使用 dconf 监视回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7538366/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com