windows - 如何将 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
解决方案
推荐阅读
- javascript - TypeError:使用 spotify 的 api 时无法读取未定义的属性
- javascript - 试图从环境文件中检索值在反应 js 中未定义
- mysql - mysql - 从多个表中获取相关行而不使用所有组合
- jax-rs - JAX-RS Response.getEntity() 始终为空
- c# - C# 不能采用 Windows InstallDate (fe CIM_OperatingSystem)
- python - discord.py BS4 选择具有相同类名的第二个 div
- snowflake-cloud-data-platform - 如何在雪花日期数据类型字段中插入儒略日期
- java - “错误:无法初始化主类,原因:java.lang.NoClassDefFoundError:[LString”
- matlab - 保存和加载 3D 矩阵的方法
- c# - ASP.NET Core 中删除的视图导致生成错误