我一直在写一些
javascript,我喜欢的环境之一是使用promises / futures来处理异步事件的方式.
在C中,您必须在未来调用.get,并阻止未来的结果可用,但在Javascript中可以编写.then(fn),并在结果准备就绪时调用该函数.在最后的时间里,它与调用者的线程相同,所以没有线程同步问题要担心,至少与c中不一样.
我正在思考c –
auto fut = asyncImageLoader("cat.jpg"); fut.then([](Image img) { std::cout << "Image is now loaded\n" << image; });
有没有办法在c中实现这一点?显然,它将需要某种事件队列和事件循环来处理调度回调.我可能最终会编写代码来做大部分工作,但是想看看是否有任何方法可以轻松地使用标准设施来实现目标.
解决方法
对于即将到来的C17标准,std :: future的一个功能已经是
proposed.
Boost’s implementation of future(符合当前标准,但提供附加功能作为扩展)已经在较新版本(1.53或更高版本)中提供了该功能的一部分.
对于更为成熟的解决方案,请查看Boost.Asio library,这样可以方便地实现由future.then提供的异步控制流. Asio的概念稍微复杂一点,因为它需要访问一个中央的io_service对象来调度异步回调,并需要手工管理工作线程.但原则上这是一个非常好的匹配你所要求的.