首页 > 解决方案 > 如何将 Windows IO 完成端口 HANDLE 转换为 GLib 的 GPollFD 以用于自定义 GSource?

问题描述

我处于非常不幸的位置,需要在所有三个主要操作系统上连接 nodejs 的 libuv 和 GLib 的 MainLoop。我需要将 libuv 的主循环和 GLib 的主循环交错,这样项目的两个部分才能快乐地生活在一起。在 unix 上,这很容易,因为 libuv 返回一个文件描述符来轮询:

GSource source;
// ...
g_source_add_unix_fd (&source->source,
                      uv_backend_fd (loop),
                      (GIOCondition) (G_IO_IN | G_IO_OUT | G_IO_ERR));

然而,在 Windows 上,没有可供轮询的文件描述符。可用的是 uv 下的 IO Completion Port HANDLE loop->iocp。我不确定如何从这里开始。我在想我可能应该使用 GLIB 中的以下函数:

void
g_source_add_poll (GSource *source,
                   GPollFD *fd);

但是我需要从中创建一个GPollFD,我不知道该怎么做,或者它是否是正确的选择。欢迎任何可以帮助我进步的提示。

相关链接:https ://github.com/romgrk/node-gtk/blob/master/src/loop.cc#L68-L75

标签: windowsglibevent-looplibuvio-completion-ports

解决方案


推荐阅读