我正在实现一个简单的窗口库作为 Ruby C 扩展。Windows 有一种handle_events!
方法可以进入其本机事件循环。
问题是我想要每个窗口和方法块有一个事件循环。我希望该方法立即返回并让循环在单独的线程中运行。实现这一目标的最佳方法是什么?
我尝试使用rb_thread_call_without_gvl
来调用事件循环函数,然后使用rb_thread_call_with_gvl
来调用窗口的回调,即Proc
s. 完整的源代码可以在这里找到。
它仍然有效,但不是我想要的:该方法仍然阻塞。Ruby 的线程模型甚至可以做到这一点吗?