由于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

C4droid异步调用框架完成初步实现相关推荐

  1. 简单的服务调用框架实现

    2019独角兽企业重金招聘Python工程师标准>>> 断断续续用了几天时间,写了一个简单的粗糙的类似DUBBO的服务调用框架. 我给框架起了个很山寨的名字,暂且命名为:pangu, ...

  2. 关于.NET异步调用的初步总结

    最近看了看.NET异步调用方面的资料,现择重点总结,若有纰漏敬请指正. 异步调用的实质: 异步调用通过委托将所需调用的方法置于一个新线程上运行,从而能够使一个可能需要较长时间的任务在后台执行而不影响调 ...

  3. Android 从零开始打造异步处理框架

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/52847872 本文出自[赵彦军的博客] 概述 封装尝试 Handler优化 线程优 ...

  4. java thrift异步调用_thrift异步调用 - thrift-cob_style-tnonblockingserver - ItBoth

    [ thrift 在python中使用了 tornado和  twisted 来作为异步的webserive服务提供异步接口,自身并没有实现     twisted:         Generate ...

  5. 异步爬虫框架与协程浅析

    异步爬虫框架与协程浅析 经典原文使用协成完成异步爬虫原文链接 根据分享原文链接. Python基于协程的实现,其实是利用了Python生成器的特性完成的,Python生成器的原理其实涉及到用户态绿色线 ...

  6. AsyncQueryHandler 异步查询框架

    AsyncQueryHandler简介: 异步的查询操作帮助类,可以处理增删改(ContentProvider提供的数据) 使用场景: 在一般的应用中可以使用ContentProvider去操作数据库 ...

  7. 如何从异步调用返回响应?

    我有一个函数foo ,它发出Ajax请求. 如何返回foo的响应? 我尝试从success回调中返回值,以及将响应分配给函数内部的局部变量并返回该局部变量,但这些方法均未真正返回响应. functio ...

  8. [android] 异步http框架与实现原理

    介绍github上的异步http框架android-async-http loopj开发 获取AsyncHttpClient对象,通过new 调用AsyncHttpClient对象的get(url,r ...

  9. springboot 异步mysql_spring boot 使用@Async实现异步调用方法

    使用@Async实现异步调用 什么是"异步调用"与"同步调用" "同步调用"就是程序按照一定的顺序依次执行,,每一行程序代码必须等上一行代码 ...

最新文章

  1. P2495-[SDOI2011]消耗战【虚树,dp】
  2. Python实例讲解 -- 解析xml
  3. xmlHttpRequest无刷新验证用户名
  4. Bailian2754 八皇后【回溯】
  5. 苹果mac高效先进的网页开发工具:Espresso
  6. android 投影技术,激光虚拟投影 从谷歌眼镜谈IT整合之路
  7. LS-DYNA系列_Mie-Gruneisen状态方程
  8. 基于Auto.js的萌猫跳辅助
  9. 软件建模与分析--共享单车管理系统
  10. 失意不灰心得意莫忘形
  11. 优雅的使用vue+Dcloud(Hbuild)开发混合app
  12. 京东云php环境配置,玩转京东云主机之④-利用宝塔软件搭建服务器PHP环境
  13. (三)CGAL库应用:仿射变换(点的旋转、平移、放大)
  14. 怎样改变照片大小?免费在线图片压缩方法
  15. SpringBoot集成权限认证框架(Sa-Token)
  16. IS_ERR()宏是什么意思
  17. 常用H5标签-第二部分
  18. SpringBoot 项目实战 ~ 9.数据缓存
  19. 分销小程序开发|分销小程序怎么设计动态分销?
  20. jmeter测试之参数Shar256加密

热门文章

  1. SAP ABAP 学习总结(1):初始SAP ABAP
  2. python爬上去飞卢_学霸的黑科技系统
  3. 轻骑兵开发平台(一)
  4. 信鸽推送 没有角标数
  5. Android Studio实验小结
  6. 错误代码:0x800704cf 不能访问网络位置
  7. 杂谈:adobe 宣告flash落幕
  8. 大二上学期(回顾与展望)
  9. java木马_Java也能写木马~(附源码!) | 学步园
  10. Linux基础入门,简单讲解