错误处理

  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. (13)oracle导出、导入

        导出 导出分三种 导出表.导出方案(用户).导出数据库 导入导出不需要进入sqlplus,都需要从cmd进到所安装的oracle目录的bin文件夹下 例如:D:\app\Administrat ...

  2. [BZOJ 1037] 生日聚会Party

    Link: BZOJ 1037 传送门 Solution: 由于对任意一段都有要求,于是我们对于所有前缀考虑其后缀不超过$k $即可: 设$dp[i][j][x][y]$为前$i$个人中有$j$个男孩 ...

  3. Lucas定理模板【bzoj2982】【combination】

    (上不了p站我要死了,侵权度娘背锅) Description LMZ有n个不同的基友,他每天晚上要选m个进行[河蟹],而且要求每天晚上的选择都不一样.那么LMZ能够持续多少个这样的夜晚呢?当然,LMZ ...

  4. SQL DISTINCT 用法(去重)

    现在以下数据 查有出现的TeacherId SELECT TeacherID FROM Student 结果 有重复的ID出现 确实查法: SELECT TeacherID FROM Student ...

  5. Android入门之文件系统操作(一)简单的文件浏览器 (转)

    Android入门之文件系统操作(一)简单的文件浏览器 (转)        import java.io.File; import java.util.*; import android.app.A ...

  6. TQ2440平台上LCD驱动的移植

    参考: http://liu1227787871.blog.163.com/blog/static/205363197201242393031250/ http://blog.csdn.net/cum ...

  7. Java 并发工具包 java.util.concurrent 用户指南(转)

    本文转自http://blog.csdn.net/defonds/article/details/44021605/ 感谢作者 1. java.util.concurrent - Java 并发工具包 ...

  8. Ubuntu16.04 -- 后台进程Nohup

    nohup用于使程序在用户退出登陆.关闭终端之后仍能继续运行 用法: nohup your_command & #(符号&使程序在后台运行) exit #(退出nohup模式) 启动后 ...

  9. 速查笔记(Linux Shell编程<下>)

    转载自: http://www.cnblogs.com/stephen-liu74/archive/2011/11/04/2228133.html 五.BASH SHELL编程: 1.    初始化顺 ...

  10. NGINX 缓存使用指南

    NGINX 缓存使用指南 [proxy_cache] Nginx 一个web缓存坐落于客户端和“原始服务器(origin server)”中间,它保留了所有可见内容的拷贝.如果一个客户端请求的内容在缓 ...