错误处理

  assert(exp)
  error("error message text")
  pcall安全调用
协同程序
  lua没有真正的多线程,都是使用协同程序也实现的多线程
  lua是非对称式协同程序(semi-coroutine),它提供两个函数来处理执行权
  任一时刻只能有一个协同程序在执行
  只能自己挂起自己才会停止工作,无法从外部停止其工作
  与生产者消费者模型一样互斥协同
  所有协同程序的函数放在coroutine的table里
  co = coroutine.create(function() print("wangning") end)
  assert(type(co)=="thread")
  create的参数就是协同程序执行的内容,返回一个thread类型的变量
  4种状态:挂起(suspended)、运行(running)、死亡(dead)、正常(normal)
  刚创建的协同程序处于挂起状态,可以用status检查状态
  assert(coroutine.status(co)=="suspended")
  coroutine.resume(co)用于启动或再次启动协同程序,将状态改为running
  当协同程序执行完成任务函数后处于dead状态
  在任务函数中使用coroutine.yield()可以挂起协同程序
  然后调用coroutine.resume()再次启动已挂起协同程序
  如果协同程序已经处于dead状态时,resume会返回false失败
  当协同程序A唤醒另一个协同程序B时,A将停止执行,换做B执行
  这时A的状态为正常状态normal
  可以使用resume和yield来交换数据
  第一次调用resume的额外参数(第二个以后的参数),都将视为协同程序任务函数的参数传入
  之后都将成为yield的返回值
  resume的第一个返回值表示成功失败,第二个以后的值都是yield的传入参数
  当协同程序的任务函数执行完成后,函数的返回值会成为resume的额外返回值
  co = coroutine.create(function(a,b,c)
      print(a,b,c)
      print(coroutine.yield(4,5,6))
      return 10
  end)
  res, a,b,c = coroutine.resume(co,1,2,3) --> 1 2 3
  print(res,a,b,c) --> true 4 5 6
  res, d = coroutine.resume(co, 7,8,9) --> 7 8 9
  print(res, d) --> true 10
  print(coroutine.resume(co)) --> false cannot resume dead coroutine
  可以使用一个协同程序负责主任务循环,判断其它协同程序状态,有闲置的就使其执行,实现多线程功能
 

lua学习笔记(七)的更多相关文章

  1. [转]LUA 学习笔记

    Lua 学习笔记 入门级 一.环境配置 方式一: 1.资源下载http://www.lua.org/download.html 2.用src中的源码创建了一个工程,注释调luac.c中main函数,生 ...

  2. (转)Qt Model/View 学习笔记 (七)——Delegate类

    Qt Model/View 学习笔记 (七) Delegate  类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...

  3. Lua 学习笔记(一)

    Lua学习笔记 1.lua的优势 a.可扩张性     b.简单     c.高效率     d.和平台无关 2.注释 a.单行注释 --        b.多行注释 --[[  --]] 3.类型和 ...

  4. Lua学习笔记6:C++和Lua的相互调用

        曾经一直用C++写代码.话说近期刚换工作.项目组中的是cocos2dx-lua,各种被虐的非常慘啊有木有.     新建cocos2dx-lua项目.打开class能够发现,事实上就是C++项 ...

  5. Lua学习笔记4. coroutine协同程序和文件I/O、错误处理

    Lua学习笔记4. coroutine协同程序和文件I/O.错误处理 coroutine Lua 的协同程序coroutine和线程比较类似,有独立的堆栈.局部变量.独立的指针指令,同时又能共享全局变 ...

  6. Learning ROS for Robotics Programming Second Edition学习笔记(七) indigo PCL xtion pro live

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...

  7. Typescript 学习笔记七:泛型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  8. (转)Lua学习笔记1:Windows7下使用VS2015搭建Lua开发环境

    Lua学习笔记1:Windows7下使用VS2015搭建Lua开发环境(一)注意:工程必须添加两个宏:“配置属性”/“C或C++”/“预处理器”/“预处理器定义”,添加两个宏:_CRT_SECURE_ ...

  9. python3.4学习笔记(七) 学习网站博客推荐

    python3.4学习笔记(七) 学习网站博客推荐 深入 Python 3http://sebug.net/paper/books/dive-into-python3/<深入 Python 3& ...

  10. Go语言学习笔记七: 函数

    Go语言学习笔记七: 函数 Go语言有函数还有方法,神奇不.这有点像python了. 函数定义 func function_name( [parameter list] ) [return_types ...

随机推荐

  1. HDU 6112.今夕何夕-蔡勒公式 (2017"百度之星"程序设计大赛 - 初赛(A)1005)

    1005:今夕何夕 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)     Probl ...

  2. HDU 1171 Big Event in HDU【01背包/求两堆数分别求和以后的差最小】

    Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...

  3. 前台vue的使用简单小结

    前台vue的使用简单小结 本项目要求:安装有node.js 6.0以及以上安装npm使用vue.js官方安装方法初始化项目npm install安装VueResurce:npm install vue ...

  4. HDU 6395 2018 Multi-University Training Contest 7 (快速幂+分块)

    原题地址 Sequence Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)T ...

  5. 彗星撞地球 | 近25万倍压缩的精品3D动画

    文章目录 写在前面 Prophecy<彗星撞地球> 下载地址 简概 注意 3D射击小游戏 下载地址 简概 写在前面 WareZ是个无形的组织,号称"不以赢利为目的纯技术团体&qu ...

  6. Android简单文件浏览器源代码 (转)

    Android简单文件浏览器源代码 (转) activity_main .xml <LinearLayout xmlns:android="http://schemas.android ...

  7. CentOS 6.9安装类型选择(Basic Server/Web Server)

    Desktop :基本的桌面系统,包括常用的桌面软件,如文档查看工具. Minimal Desktop:基本的桌面系统,包含的软件更少. Minimal:基本的系统,不含有任何可选的软件包. Basi ...

  8. iOS教程:如何使用NSFetchedResultsController

    不知不觉我们已经来到了Core Data系列教程的最后一部分了,在这里我们要讨论如何使用NSFetchedResultsController来优化我们的应用,提高应用的运行速度,减少其内存占用. 你是 ...

  9. android intent 跳转

    转自:http://blog.sina.com.cn/s/blog_7309444701014u2d.html 一.不需要返回值的跳转 Intent intent=new Intent(); inte ...

  10. ckeditor的详细配置(转)

    CKEditor 3 JavaScript API Documentation : http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.con ...