相当于linux下的NSRunLoop(树莓派)



OSX有NSRunLoop,它只是坐在那里等待定时器和源启动。然后,苹果切换到Grand Central Dispatch(GCD),在那里你有dispatch_main()来保持应用程序的活力,还有一堆dispatch_source_来安排事情或获取通知(来自套接字或用户操作)。如果什么都没发生,应用程序就是空闲的,不使用任何CPU电源。

现在我想学习如何用c++编写驱动程序。所以我有一个树莓pi(所以是linux),偶尔数据会从套接字或中断中传入。

我想处理事件,而不是轮询。因此,我正在为c++和linux搜索NSRunLoop的等效程序。

尽管我也想了解这样的东西是如何实现的。在伪代码中,运行循环的行为是这样的,据我所知,

timeout = 0
while (true) {
wait(timeout) || wait for source event other than timer
loop all timers
if timer fired
run timer action
loop all timers
timeout = min(timeout, timer.timeNextEvent)
loop all sources
if source hasData
run source action      
}

我没有得到的是顶部的等待功能。在不进入sleep模式的情况下,如何等待源(比如计时器)启动?

我发现了许多进入sleep模式的轮询和定时器的例子。但我想避免sleep,只等待中断或信号或用户生成的事件,如命令行上的键盘输入。

有关于如何继续的建议吗?

这个答案可能已经晚了,但如果有人来了,epoll应该是答案。https://man7.org/linux/man-pages/man7/epoll.7.html

最新更新