【发布时间】:2011-12-02 06:41:26
【问题描述】:
我正在使用一个开源映射工具,它能够使用 g_io_add_watch 来监视文件描述符。我正在尝试查看标准输入文件描述符,并且我已经成功地能够在标准输入接收数据时调用回调。但是,我无法读取此数据。我正在尝试修改回调以接收在开源 api 的处理程序中描述的信息。
编辑** 我的问题首先是什么是 void** 以及在这种情况下如何使用它。我希望为我的回调函数提供您在下面看到的 readUserInput_two 函数描述的参数,并且我需要通过下面描述的回调系统传递它。我很困惑我需要传递什么作为我的 void** 以允许当前实现传递这些参数。
看起来像这样
readUserInput_two(GIOChannel *ioch, GIOCondition cond, gpointer data)
我想将此指针存储到定义为的回调中
struct callback {
void (*func)();
int pcount;
enum attr_type type;
void *p[0];
};
在用于实例化回调的函数中,您提供以下参数
callback_new(void (*func)(void), int pcount, void **p)
在这个调用中,pcount 是你的函数指针应该有的参数数量,我相信 void**p 要么是这些参数的类型,要么是某种类型,但我似乎无法弄清楚。
当回调被触发时,它会调用一个在定义语句中定义的函数,看起来就是这样。
#define callback_call_3(cb,p1,p2,p3) callback_call_args(cb, 3, p1, p2, p3)
这个函数是为各种数量的p的ex定义的。 callback_call_1(cb,p1) 也存在。谁能解释我如何让我的回调函数接收这些数据字段。调用 callback_call_3 的中间回调触发函数如下所示。
static gboolean
navfocus_call_watch(GIOChannel * iochan, GIOCondition condition, gpointer t)
{
struct callback *cb=t;
if(cb->pcount == 1)//I added this if before it only had callback_call_0
{
callback_call_0(cb);
}
else if(cb->pcount == 4)
{
callback_call_3(cb,iochan,condition,t);
}
return TRUE;
}
【问题讨论】:
-
我不明白你的问题是什么,你尝试了什么,什么不起作用??
标签: c callback glib void-pointers