C++ 什么';WaitForMultipleObjectsEx在Linux中的等效值是多少?
我正在重写我十年前开发的基于Windows的信号处理引擎。我现在想让它同时在Windows和Linux下运行 理想的是,我想使用一个可移植的C++库来帮助这个,但是我也准备好了,如果我的代码不那么好,那就是把Windows系统调用映射到Linux系统调用。但我不是Linux专家 在一个中心例程中,我很难消除对Windows对象模型的依赖:任务调度器,它使用WaitForMultipleObjectsEx来实现设计模式:C++ 什么';WaitForMultipleObjectsEx在Linux中的等效值是多少?,c++,asynchronous,C++,Asynchronous,我正在重写我十年前开发的基于Windows的信号处理引擎。我现在想让它同时在Windows和Linux下运行 理想的是,我想使用一个可移植的C++库来帮助这个,但是我也准备好了,如果我的代码不那么好,那就是把Windows系统调用映射到Linux系统调用。但我不是Linux专家 在一个中心例程中,我很难消除对Windows对象模型的依赖:任务调度器,它使用WaitForMultipleObjectsEx来实现设计模式: for (;;) { while (WAIT_IO_COMPLETI
for (;;) {
while (WAIT_IO_COMPLETION == (evt_idx = ::WaitForMultipleObjectsEx(n_handles, events+current_eventlist_idx, FALSE, INFINITE, TRUE)))
;
evt_id = evt_idx+current_eventlist_idx-WAIT_OBJECT_0;
if (evt_id >= n_handles)
evt_id -= n_handles;
if (evt_id == 0) // 0 == terminate event
break;
// bump round-robin eventlist pointer
if (++current_eventlist_idx == n_handles)
current_eventlist_idx = 0;
// make zero indexed
--evt_id;
// execute the processor chain
(*schedules[evt_id].chain())();
}
上面对Windows事件进行循环轮询。
这些事件可能是:
- 在用户代码(即我的代码)中明确提出的信号量李>
- 在用户代码中明确设置的事件(例如,设备连接)李>
while
循环:它们由Windows IO完成端口处理:这些事件导致WaitForMultipleObjectsEx
调用返回,但不要中断while
循环-它们允许运行I/O完成回调,之后任务计划程序立即启动另一个WaitForMultipleObjectsEx
调用,并继续等待任何用户代码触发的事件
关于WaitForMultipleObjectsEx
需要注意的是,它允许同时从系统和用户代码中等待一组非常异构的事件
我在Linux中发现的最接近它的方法是结合使用and-这是一种好方法吗
,我在其他应用程序中使用过,看起来它可以做我想做的事情,但我正在努力映射上面例程中的功能以使用它。我是不是遗漏了什么
我是否应该考虑其他便携式图书馆 我个人使用了您提到的eventfd+poll组合,并封装在under和abstract类中,它在Windows上的posix和WaitForMultipleObjects上实现了这一点。很好。