coroutine in lua

今天试着在项目的lua5.1里用coroutine, 想“优雅的”解决对话框弹出的问题, 让它有返回值。

但遇到lua: attempt to yield across metamethod/C-call boundary。   在网上查了查,没弄好,就不弄了。(对工作没热情的后果就是这样,我要是爱它,我会把整个项目换成lua 5.2,5.3)

下面是几篇文章,将来备用。还有自己的一点总结:

http://blog.codingnow.com/2012/06/continuation_in_lua_52.html

http://lua-users.org/lists/lua-l/2008-05/msg00181.html

http://stackoverflow.com/questions/8459459/lua-coroutine-error-tempt-to-yield-across-metamethod-c-call-boundary

http://www.cppblog.com/kevinlynx/archive/2008/08/12/58636.html

1,有人明确说主线程里yield会出这个错误。云风的博客里给的解释似乎更本质一些。

2,cppblog的那篇文章里,明明写成了一个(它就是为了解决对话框问题),但它的代码我几乎是照搬,嵌入项目里,还是不行。它用的也是5.1。

时间: 2024-11-24 12:21:24

coroutine in lua的相关文章

Lua之协同程序(coroutine)

什么是协同(coroutine)? Lua 协同程序(coroutine)与线程比较类似:拥有独立的堆栈,独立的局部变量,独立的指令指针,同时又与其它协同程序共享全局变量和其它大部分东西. 协同是非常强大的功能,但是用起来也很复杂. 线程和协同程序区别 线程与协同程序的主要区别在于,一个具有多个线程的程序可以同时运行几个线程,而协同程序却需要彼此协作的运行. 在任一指定时刻只有一个协同程序在运行,并且这个正在运行的协同程序只有在明确的被要求挂起的时候才会被挂起. 协同程序有点类似同步的多线程,在

Lua基础 coroutine —— Lua的多线程编程

Lua的coroutine 跟thread 的概念比较相似,但是也不完全相同.一个multi-thread的程序,可以同时有多个thread 在运行,但是一个multi-coroutines的程序,同一时间只能有一个coroutine 在运行,而且当前正在运行的coroutine 只有在被显式地要求挂起时,才会挂起.Lua的coroutine 是一个强大的概念,尽管它的几个主要应用都比较复杂. 1. Coroutine 基础 Lua将coroutine相关的所有函数封装在表coroutine 中

Lua 协程coroutine

协程和一般多线程的区别是,一般多线程由系统决定该哪个线程执行,是抢占式的,而协程是由每个线程自己决定自己什么时候不执行,并把执行权主动交给下一个线程. 协程是用户空间线程,操作系统其存在一无所知,所以需要用户自己去做调度,用来执行协作式多任务非常合适. 线程和协同程序的主要不同在于:在多处理器情况下,多线程程序同时运行多个线程:而协同程序是通过协作来完成,在任一指定时刻只有一个协同程序在运行,并且这个正在运行的协同程序只在必要时才会被挂起.这样Lua的协程就不能利用现在多核技术了. (一)Cor

【转】Lua coroutine 不一样的多线程编程思路

Lua coroutine 不一样的多线程编程思路 Sunday, Apr 26th, 2009 by Tim | Tags: coroutine, Lua 上周末开始看<Lua程序设计>第二版,目前体会到其中比较有趣的有两点,一是强大的table数据结构,另外就是coroutine.也许Lua 中的coroutine是一种很好的设计模式,但我初步的体会还是没想到其他语言和场合能非常适合用到coroutine的场景. 一.简介 协同程序与线程差不多,也就是一条执行序列,拥有自己独立的栈,局部变

lua 环境探索

什么是环境? http://www.lua.org/manual/5.1/manual.html#2.9 Besides metatables, objects of types thread, function, and userdata have another table associated with them, called their environment. Like metatables, environments are regular tables and multiple

Lua 架构 The Lua Architecture

转载自:http://magicpanda.net/2010/10/lua%E6%9E%B6%E6%9E%84%E6%96%87%E6%A1%A3/ Lua架构文档(翻译) 十 102010 前段时间翻译了lua官方关于lua5架构设计的一份文档,现在分享给大家. 注意:所有版权都归lua官方所有,本人仅将其翻译为中文,以方便中文阅读者.翻译中出现任何错误导致的结果,本人不负任何责任. 如果有任何翻译错误,以及意见与建议,请email本人.邮件地址:[email protected]. 转载请注

Lua面试题目

1.Lua的特性 轻量级: 它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里. 可扩展: Lua提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样. 其它特性: 支持面向过程(procedure-oriented)编程和函数式编程(functional programming): 自动内存管理:只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象: 语言内置模式

Java 中的纤程库 – Quasar

来源:鸟窝, colobu.com/2016/07/14/Java-Fiber-Quasar/ 如有好文章投稿,请点击 → 这里了解详情 最近遇到的一个问题大概是微服务架构中经常会遇到的一个问题: 服务 A 是我们开发的系统,它的业务需要调用 B.C.D 等多个服务,这些服务是通过http的访问提供的. 问题是 B.C.D 这些服务都是第三方提供的,不能保证它们的响应时间,快的话十几毫秒,慢的话甚至1秒多,所以这些服务的Latency比较长.幸运地是这些服务都是集群部署的,容错率和并发支持都比较

Java的纤程库 - Quasar

最近遇到的一个问题大概是微服务架构中经常会遇到的一个问题: 服务 A 是我们开发的系统,它的业务需要调用 B . C . D 等多个服务,这些服务是通过http的访问提供的. 问题是 B . C . D 这些服务都是第三方提供的,不能保证它们的响应时间,快的话十几毫秒,慢的话甚至1秒多,所以这些服务的Latency比较长.幸运地是这些服务都是集群部署的,容错率和并发支持都比较高,所以不担心它们的并发性能,唯一不爽的就是就是它们的Latency太高了. 系统A会从Client接收Request,