C4droid异步调用框架完成初步实现

由于C4droid目前(C4droid 5.0 with GCC 5.3)不支持std::future和std::async,所以异步调用必须手动实现。于是,使用std::thread,借助宏定义和指针等比较底层的东西,初步实现了C4d上可用的异步调用框架。

查看源代码: View Source On GitHub

大体的想法就是使用std::thread和detach()方法,完成线程的创建和分离。并不推荐使用join()方法因为异步调用可能会非常耗时。detach()之后thread对象的joinable()变为false. 离开作用域时的析构不会抛出异常影响整个流程。

使用宏定义和指针完成对cancel状态,over状态以及返回值的包装。但是这里存在一个问题,如果创建线程的函数在线程退出之前结束了运行,那么栈空间将被释放。 此时如果线程函数仍然使用这些指针时,有可能发生未定义行为,更坏的情况是发生段错误。对于这样的错误目前还无法避免。(或许使用堆内存比较好,但是内存泄露又是一个棘手的问题)也许上一版(Async-Call Frame (ver. 1) On GitHub)的那种自行释放可以解决这个问题。这几天我会继续考虑这个问题并持续优化。

总之希望这个异步调用框架能够解决各位在C4droid试图进行异步调用时遇到的问题。ヾ(o◕∀◕)ノヾ

欢迎关注我在GitHub上的战争时代WarTime项目~ WarTime Project On GitHub

你可能感兴趣的:(异步调用,C++11,stdfuture,C4droid,stdasync)