我陷入了 libev 中争论的境地。
通常,libev 在类似的函数中接收包*接收回调*,没关系,但是实际操作中,我们需要派遣一个亲戚*写回调*根据收到的包裹处理具体工作。例如:
S_RECV_MSG* pstRecvMsg = (S_RECV_MSG*) recv_buff;
switch(pstRecvMsg->wMsgType) {
case 1:
ev_io_init(w, write_callback1, w->fd, EV_WRITE);
break;
case 2:
ev_io_init(w, write_callback2, w->fd, EV_WRITE);
break;
case 3:
// .......
}
我的问题是,如果write_callbackX
还必须读取recv_buff中的具体内容,我们如何将recv_buff参数传递给callbackX?我们必须在这里承受全局变量的负担和丑陋吗?
作者自己回答了,但在评论中。由于这显示为未答复,我
将他的答案发布在“答案”部分并关闭循环。不确定是否有更好的方法...请随时解决这个问题。
问题作者说:
抱歉,我想我现在得到了答案,并对我的行为感到深深的羞愧
不小心阅读文档:
struct my_io{
ev_io io;
int otherfd;
void *somedata;
struct whatever *mostinteresting;
};
// ...
struct my_io w;
ev_io_init (&w.io, my_cb, fd, EV_READ);
然后我们像这样使用 my_io :
static void my_cb (struct ev_loop *loop, ev_io *w_, int revents)
{
struct my_io *w = (struct my_io *)w_;
//...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)