``select''noks of'kqueue'n not x11连接时不
这会阻止直到有X11事件:
int x11_fd = ConnectionNumber(display);
fd_set in_fds;
FD_ZERO(&in_fds);
FD_SET(x11_fd, &in_fds);
select(x11_fd + 1, &in_fds, NULL, NULL, NULL);
这立即返回:
int x11_fd = ConnectionNumber(display);
int kq = kqueue();
struct kevent ev;
EV_SET(&ev, x11_fd, EVFILT_READ, EV_ADD, 0, 0, 0);
kevent(kq, &ev, 1, NULL, 0, NULL);
为什么?我是否错误地使用kqueue
错误?
This blocks until there's an X11 event available:
int x11_fd = ConnectionNumber(display);
fd_set in_fds;
FD_ZERO(&in_fds);
FD_SET(x11_fd, &in_fds);
select(x11_fd + 1, &in_fds, NULL, NULL, NULL);
This just immediately returns:
int x11_fd = ConnectionNumber(display);
int kq = kqueue();
struct kevent ev;
EV_SET(&ev, x11_fd, EVFILT_READ, EV_ADD, 0, 0, 0);
kevent(kq, &ev, 1, NULL, 0, NULL);
Why? Am I using kqueue
incorrectly?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我相当确定我误解了 kqueue 的 API。
OP 中显示的调用仅将过滤器添加到队列中,不会等待它们。为此,需要将一个单独的
kevent
数组传递给eventlist
参数。I'm fairly sure I misunderstood the API of
kqueue
.The call shown in the OP only adds the filters to the queue, it doesn't wait on them. In order to do that, a separate array of
kevent
s needs to be passed to theeventlist
param.