gpt4 book ai didi

c - 如何通过 g_idle_add() 传递多个参数?

转载 作者:行者123 更新时间:2023-12-04 10:11:32 37 4
gpt4 key购买 nike

我正在尝试使用 g_idle_add()具有需要多个参数的函数。我可以通过某种方式内联传递它们还是必须为此创建一个结构?

主要目标是减少内存消耗,其他都是次要的。

static gboolean checker(gpointer plugin, int toggle){
...
return FALSE;
}
g_idle_add(checker, ??? plugin, 0 ??? );

最佳答案

传递给 g_idle_add 的函数需要有一个与 GSourceFunc 类型相匹配的签名,这意味着它必须恰好采用一个指针参数。您必须在堆上分配一个结构(不是评论者建议的堆栈,只有在创建它的函数运行时才有效)包含您需要的信息。像这样:

struct checker_arguments {
gpointer plugin;
int toggle;
};

static gboolean checker(gpointer data) {
struct checker_arguments *args = data;
/* Do stuff with args->plugin and args->toggle */
g_slice_free1(args, sizeof(*args));
return FALSE;
}

struct checker_arguments *args = g_slice_alloc(sizeof(*args));
args->plugin = plugin;
args->toggle = 0;
g_idle_add(checker, args);

因为你担心内存消耗,所以我使用了 slice allocation在这个例子中而不是正常的 heap allocation .切片分配对于固定大小的对象更有效。

关于c - 如何通过 g_idle_add() 传递多个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20695068/

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