Libev,如何将参数传递给相关的回调

use*_*372 23 c callback libev

我陷入了在libev中传递争论的局面.

通常,libev在类似*receive_callback*的函数中接收包,这没关系,但实际上,我们需要根据收到的包调度相对*write_callback*来处理特定的作业.例如:

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:
        // .......
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果write_callbackX还必须读取recv_buff中的具体内容,我们如何将recv_buff参数传递给callbackX?我们必须承担全球变量的负担和丑陋吗?

lsk*_*lsk 5

作者自己回答,但是在评论中.由于这显示为未答复,我在"回答"部分发布他的答案并关闭循环.不确定是否有更好的方法...随时解决这个问题.

问题作者说:

对不起,我想我现在得到了答案,对于我粗心阅读文档感到非常惭愧:

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);
Run Code Online (Sandbox Code Playgroud)

然后我们像这样使用my_io:

static void my_cb (struct ev_loop *loop, ev_io *w_, int revents)
{
   struct my_io *w = (struct my_io *)w_;
   //...
}
Run Code Online (Sandbox Code Playgroud)