Android本科毕业设计基于Android的天气预报开发APP系统源码。显示城市当前的实时天气状况,包括城市名称、城市名片、天气情况、温度高低、星期等信息。界面左边有一列城市列表,显示中国各个城市名称,当用户想知道哪个城市的天气情况时,点击这个城市名就可以获取天气状况,显示城市名称,城市名片,温度和天气情况,同时对未来6天的天气情况简述。

文件:url80.ctfile.com/f/25127180-735570002-a415c2?p=551685 (访问密码: 551685)

Android本科毕业设计基于Android的天气预报开发APP系统源码。显示城市当前的实时天气状况,包括城市名称、城市名片、天气情况、温度高低、星期等信息。界面左边有一列城市列表,显示中国各个城市名称,当用户想知道哪个城市的天气情况时,点击这个城市名就可以获取天气状况,显示城市名称,城市名片,温度和天气情况,同时对未来6天的天气情况简述Android本科毕业设计基于Android的天气预报开发APP系统源码。


首先,在计算机科学中 routine 被定义为一系列的操作,多个 routine 的执行形成一个父子关系,并且子 routine 一定会在父 routine 结束前结束,也就是一个个的函数执行和嵌套执行形成了父子关系。

coroutine 也是广义上的 routine,不同的是 coroutine 能够通过一些操作保持执行状态,显式地挂起和恢复,相对于 routine 的单控制流,coroutine 能提供一个加强版的控制流。

协程执行转移

如图中的处理流程,多个 coroutine 通过一些机制,首先执行 routine foo 上的 std::cout << “a” 然后切换到 routine bar 上执行 std::cout << “b”,再切换回 routine foo 直到两个 routine 都执行完成。

coroutine 如何运行?

通常每个 corotuine 都有自己的 stack 和 control-block,类似于线程有自己的线程栈和control-block,当协程触发切换的时候,当前 coroutine 所有的非易失(non-volatile)寄存器都会存储到 control-block 中,新的 coroutine 需要从自己相关联的 control-block 中恢复。

协程的分类
A. 根据协程的执行转移机制可以分为非对称协程和对程协程:

非对称协程能知道其调用方,调用一些方法能让出当前的控制回到调用方手上。
对程协程都是平等的,一个对程协程能把控制让给任意一个协程,因此,当对称协程让出控制的时候,必须指定被让出的协程是哪一个。
B. 根据运行时协程栈的分配方式又能分为有栈协程和无栈协程:

通常情况下,有栈协程比无栈协程的功能更加强大,但是无栈协程有更高的效率,除此之外还有下面这些区别:

有栈协程能够在嵌套的栈帧中挂起并且在之前嵌套的挂起点恢复,而无栈协程只有最外层的 coroutine 才能够挂起,由顶层 routine 调用的 sub-routine 是不能够被挂起的。

有栈协程通常需要分配一个确定且固定的内存用来适配 runtime-stack,上下文的切换的时候相比于无栈协程也更加消耗资源,比如无栈协程仅仅只需要存储一个程序计数器(EIP)。有栈协程在语言(编译器)的支持下,有栈协程能够利用编译期计算得到非递归协程栈的最大大小,因此,内存的使用方面能够有所优化。无栈协程,不是代表没有运行时的栈,无栈只是代表着无栈协程所使用的栈是当前所在上下文的栈(比如一个函数 ESP~EBP 的区间内),所以能够正常调用递归函数。相反,有栈协程调用递归函数的时候,所使用的栈是该协程所申请的栈。

分三个方面来总结的话就是:

内存资源使用:无栈协程借助函数的栈帧来存储一些寄存器状态,可以调用递归函数。而有栈协程会要申请一个内存栈用来存储寄存器信息,调用递归函数可能会爆栈。

速度:无栈协程的上下文比较少,所以能够进行更快的用户态上下文切换。

功能性:有栈协程能够在嵌套的协程中进行挂起/恢复,而无栈协程只能对顶层的协程进行挂起,被调用方是不能挂起的。

Boost.Coroutine
C++ Boost 库在 2009 年就提供了一个子库叫做 Boost.Coroutine 实现了有栈协程,且实现了对称(symmetric)和非对程(symmetric)协程。

  1. 非对程协程(Asymmetric coroutine)
    非对程协程提供了 asymmetric_coroutine::push_type 和 asymmetric_coroutine::pull_type 两种类型用于处理协程的协作。由命名可以理解,非对程协程像是创建了一个管道,通过push_type写入数据,通过pull_type拉取数据。

协程例子 A

boost::coroutines::asymmetric_coroutine::pull_type source(
[&](boost::coroutines::asymmetric_coroutine::push_type& sink){
int first=1,second=1;
sink(first);
sink(second);
for(int i=0;i<8;++i){
int third=first+second;
first=second;
second=third;
sink(third);
}
});

for(auto i : source)
std::cout << i << " ";

output:
1 1 2 3 5 8 13 21 34 55
上面的例子是协程实现的斐波那契数列计算,在上面的例子中,push_type 的实例构造时接受了一个函数作为构造函数入参,而这个函数就是 协程函数(coroutine function),coroutine 在 pull_type 创建的上下文下运行。

该协程函数的入参是一个以 push_type&,当实例化外层上下文中 pull_type 的时候,Boost 库会自动合成一个 push_type 传递给协程函数使用,每当调用 asymmetric_coroutine<>::push_type::operator() 的时候,协程会重新把控制权交还给push_type所在的上下文。其中asymmetric_coroutine 的模板参数 T 定义了协程协作时使用的数据类型。

由于 pull_type 提供了input iterator,重载了 std::begin和std::end所以能够用 range-based for 循环方式来输出结果。

另外要注意的是,当第一次实例化pull_type的时候,控制权就会转移到协程上,执行协程函数,就好比要拉取(pull)数据需要有数据先写入(push)。

协程例子 B

struct FinalEOL{
~FinalEOL(){
std::cout << std::endl;
}
};

const int num=5, width=15;
boost::coroutines::asymmetric_coroutinestd::string::push_type writer(
[&](boost::coroutines::asymmetric_coroutinestd::string::pull_type& in){
// finish the last line when we leave by whatever means
FinalEOL eol;
// pull values from upstream, lay them out ‘num’ to a line
for (;

Android本科毕业设计基于Android的天气预报APP系统(附带源码)相关推荐

  1. java毕业设计基于Vue框架的养生系统mybatis+源码+调试部署+系统+数据库+lw

    java毕业设计基于Vue框架的养生系统mybatis+源码+调试部署+系统+数据库+lw java毕业设计基于Vue框架的养生系统mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: ...

  2. 基于Java毕业设计超市货品进销存系统后台源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计超市货品进销存系统后台源码+系统+mysql+lw文档+部署软件 基于Java毕业设计超市货品进销存系统后台源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B ...

  3. 基于Java毕业设计超市货品进销存系统前台源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计超市货品进销存系统前台源码+系统+mysql+lw文档+部署软件 基于Java毕业设计超市货品进销存系统前台源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B ...

  4. java计算机毕业设计基于springboot+vue+elementUI的旅游网站(源码+数据库+Lw文档)

    项目介绍 旅游管理平台采用B/S模式,促进了旅游管理平台的安全.快捷.高效的发展.传统的管理模式还处于手工处理阶段,管理效率极低,随着用户的不断增多,传统基于手工管理模式已经无法满足当前用户需求,随着 ...

  5. java毕业设计基于VUE的个人记账管理系统mybatis+源码+调试部署+系统+数据库+lw

    java毕业设计基于VUE的个人记账管理系统mybatis+源码+调试部署+系统+数据库+lw java毕业设计基于VUE的个人记账管理系统mybatis+源码+调试部署+系统+数据库+lw 本源码技 ...

  6. 计算机毕业设计基于springboot+vue+elementUI的网吧管理系统(源码+系统+mysql数据库+Lw文档)

    项目介绍 随着我国的经济发展,人们的生活水平也有了一定程度的提高,对网络的要求也越来越高,很多家庭都有了自己的电脑,但是很多时候大家在家里玩电脑的时候找不到那种玩耍的气氛和氛围,这个时候大家就都选择了 ...

  7. java毕业设计基于SpingBoot的剧本杀管理系统mybatis+源码+调试部署+系统+数据库+lw

    java毕业设计基于SpingBoot的剧本杀管理系统mybatis+源码+调试部署+系统+数据库+lw java毕业设计基于SpingBoot的剧本杀管理系统mybatis+源码+调试部署+系统+数 ...

  8. 物联网毕业设计 基于RFID门禁防盗报警系统(源码+论文)

    文章目录 1 简介 2 绪论 2.1 课题背景与目的 3 射频识别 3.1 射频识别技术 3.2 射频识别模块 3.2.1 RFID模块 3.2.2 RFID模块组成 4 系统设计 4.1 系统架构 ...

  9. java计算机毕业设计基于MVC框架的在线书店设计源码+数据库+系统+lw文档+mybatis+运行部署

    java计算机毕业设计基于MVC框架的在线书店设计源码+数据库+系统+lw文档+mybatis+运行部署 java计算机毕业设计基于MVC框架的在线书店设计源码+数据库+系统+lw文档+mybatis ...

最新文章

  1. JavaScript:Object.prototype.toString进行数据类型判定
  2. [转]数据库开发21条军规
  3. Win32 ListView控件基本使用
  4. 基于FPGA的HDB3编译码器设计
  5. 如何配置Filter过滤器处理JSP中文乱码
  6. python webservice接口测试传参数_Python3 webservice接口测试方法是什么
  7. 计算机对中断的处理是在用户态下进行的,电大本科生作业系统作业3与答案.doc...
  8. decimal类型 go_Go 语言程序设计——字符串类型(2)
  9. 【FLink】Flink 1.9 升级到 1.12.4 无配置页面 无日志
  10. Paravirtualization (半虚拟化PV) - Xen
  11. 蠕虫病毒往往是通过进入计算机系统,2012年甘肃省三职生计算机考试题
  12. 2.2-特殊权限之sticky
  13. 关于Jquery中 “$(document).ready(function(){ })”函数的使用
  14. 解决ASP.NET中Redis 每小时6000次访问请求的问题
  15. webpack-Hot Module Replacement(热更新)
  16. java基础学习(5)疯狂java讲义第4章课后习题解答源码
  17. 一分钟让你知道Hadoop是什么
  18. USB Audio Class (UAC)音频解读规范
  19. 网盘企业,免费用户是不是不配下载?
  20. 基于半衰期的分级存储

热门文章

  1. 适龄人群接种率不足1%,专家呼吁尽快将HPV疫苗纳入免疫规划
  2. canny算子的边缘提取算法
  3. django 百科全书
  4. 你的生活以什么为中心
  5. 新书上架|管理者的新角色,首席情绪官
  6. 一次表格及分页优化完善实践,表头固定及分页固定(模仿禅道)
  7. FreeType与CFF
  8. 用python实现论文中的箱线图(盒图) 黑白色 新罗马字体
  9. 如何在CSDN博客中插入动态图(GIF)
  10. Django安装mysqlclient报错的问题