Alooper_addFd 数据参数
Alooper_addFd data parameter
我不确定这个功能是如何工作的。这是原型:
int ALooper_addFd(ALooper*looper, int fd, int ident, int events, ALooper_callbackFunc callback, void *data);
这个'data'指针是什么?如果回调不为 NULL,'data' 应该是传递给回调的自定义数据。但是,如果回调为 NULL,'data' 参数用于什么?或者它也必须为 NULL,在那种情况下?
有这方面的详细文档吗?谢谢指教!
它是一个指向任意数据的指针,您可以在应用程序中根据需要设置它。
除了作为回调的参数发送外,当您调用 ALooper_pollAll
或 ALooper_pollOnce
.
您可以查看 Android Native App Glue 作为示例。在这种情况下,data
指向由胶水定义的 android_poll_source
结构,并且要使胶水将循环程序的文件描述符中的命令转换为输入和 APP_CMD
事件,您必须调用process
中的 (android_poll_source *)data
函数,当您从循环程序接收到事件时:
int ident, events;
struct android_poll_source *source; // source is the data here
while ((ident = ALooper_pollAll(0, NULL, &events, (void **)(&source))) >= 0) {
if (source) {
source->process(source->app, source);
}
}
我不确定这个功能是如何工作的。这是原型:
int ALooper_addFd(ALooper*looper, int fd, int ident, int events, ALooper_callbackFunc callback, void *data);
这个'data'指针是什么?如果回调不为 NULL,'data' 应该是传递给回调的自定义数据。但是,如果回调为 NULL,'data' 参数用于什么?或者它也必须为 NULL,在那种情况下?
有这方面的详细文档吗?谢谢指教!
它是一个指向任意数据的指针,您可以在应用程序中根据需要设置它。
除了作为回调的参数发送外,当您调用 ALooper_pollAll
或 ALooper_pollOnce
.
您可以查看 Android Native App Glue 作为示例。在这种情况下,data
指向由胶水定义的 android_poll_source
结构,并且要使胶水将循环程序的文件描述符中的命令转换为输入和 APP_CMD
事件,您必须调用process
中的 (android_poll_source *)data
函数,当您从循环程序接收到事件时:
int ident, events;
struct android_poll_source *source; // source is the data here
while ((ident = ALooper_pollAll(0, NULL, &events, (void **)(&source))) >= 0) {
if (source) {
source->process(source->app, source);
}
}