作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 libevent 编写一个事件驱动的应用程序,我需要使用 libusb-1.0 进行 USB 传输。
我想使用 libusb_get_pollfds获取文件描述符列表(在 fds
中)并将它们添加到 libevent,如下所示:
const struct libusb_pollfd **fds = libusb_get_pollfds(device->context);
const struct libusb_pollfd *it = *fds;
for(;it != NULL; ++it) {
cout << "Adding fd: " << it->fd << ", " << it->events << endl;
struct event * ev = event_new(base_,
it->fd, it->events | EV_PERSIST,
callbacks::libusb_cb, this);
event_add(ev, 0);
libusb_fds_events.insert(std::make_pair(it->fd, ev));
}
free(fds);
// (...)
// And the callback function:
void callbacks::libusb_cb(evutil_socket_t fd, short what, void *arg) {
Server *s = reinterpret_cast<Server*>(arg);
libusb_handle_events_timeout(s->device_->context, 0);
}
此外,我使用 libusb_set_pollfd_notifiers从 libusb_fds_events
添加/删除 fds。
问题是我在 libusb 返回的列表中得到了很多奇怪的 fds(例如,我多次得到 stdin
(!),事件等于 0)。
我是否以正确的方式使用它?
最佳答案
我发现代码中有错误。应该是:
const struct libusb_pollfd **it = fds;
for(;*it != NULL; ++it) {
cout << "Adding fd: " << (*it)->fd << ", " << (*it)->events << endl;
struct event * ev = event_new(base_,
(*it)->fd, (*it)->events | EV_PERSIST,
callbacks::libusb_cb, this);
event_add(ev, 0);
libusb_fds_events.insert(std::make_pair((*it)->fd, ev));
}
关于c++ - 如何将 libusb 与 libevent 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5852742/
我是一名优秀的程序员,十分优秀!