[lua]协同式多任务,统筹运用
-- CPM:关键路径法(Critical Path Method)
jobBase = {
schedule = function ( self, job, task, ... ) --由具体job构造任务列表
local finale = false
local msg = nil
local rc = nil
local params = table.pack(self, task, ...)
repeat
];
local fn = job[task]
if type(fn) == "function"
)) end
finale = (task == "finale")
msg = self.name.."["..task.."] done!"
if not finale
then
-- yield 传回进度描述及任务反馈
-- 打包调度入参
params = table.pack(coroutine.yield(msg, rc))
end
until finale
self.co = nil -- over
return msg, rc
end;
perform = function ( self, task, ... )
local co = self.co or coroutine.create(self.schedule)
if self.co == nil
then self.co = co end
return coroutine.resume(co, self, task, ...)
end;
}--jobBase
---------------------------------------------------------------
--记得华罗庚的统筹方法论对烧水泡茶的描述过程
--就是多任务协调的执行程序
--示例:project, another两项任务节点的调度与描述
--{}, 构造描述的脚本模式
local project = {
name = "projectSample";
perform = jobBase.perform;
schedule = function ( self, task, ... )
local todo = {
["stage1"] = function()
end;
["stage2"] = function()
end;
["stage3"] = function()
end;
["finale"] = function()end;
}
return jobBase.schedule(self, todo, task, ...)
end
}
--记得区分对象调用与域调用,一不小心就写成. 就无法识别self了
print(project:perform("stage1"))
--creator, object based; 基于创建对象,对象扩展的脚本模式
function jobBase.create( name )
local o = {name = name}
return setmetatable(o, {__index = jobBase})
end
local another = jobBase.create("anotherProject")
function another:schedule( task, ... )
local todo = {
["stage1"] = function()
end;
["stage2"] = function()
end;
["finale"] = function()end;
}
return getmetatable(self).__index.schedule(self, todo, task, ...)
end
print(another:perform("stage1"))
print(project:perform("stage2"))
print(project:perform("stage3"))
print(another:perform("stage2"))
print(project:perform("finale"))
print(another:perform("finale"))
本贴代码重点,提示两种脚本应用模式。构造描述的对象模式;基于创建方法,对象扩展的脚本模式。
此例演示coroutine用于多任务协同,统筹方法的一种脚本描述。
[lua]协同式多任务,统筹运用的更多相关文章
- 使用KEIL C51实现的简单合作式多任务操作系统内核(单片机实现版本)
基于网上网友的代码,自己在单片机上实现, 特此记录分享之. 基于https://blog.csdn.net/yyx112358/article/details/78877523 //使用KEIL C5 ...
- Lua 协同程序(coroutine)
什么是协同(coroutine)? Lua 协同程序(coroutine)与线程比较类似:拥有独立的堆栈,独立的局部变量,独立的指令指针,同时又与其它协同程序共享全局变量和其它大部分东西. 协同是非常 ...
- Lua 学习之基础篇九<Lua 协同程序(Coroutine)>
引言 讲到协程,首先来介绍一下线程和协程的区别 lua协程和多线程 相同之处:拥有自己独立的桟.局部变量和PC计数器,同时又与其他协程共享全局变量和其他大部分东西 不同之处:一个多线程程序可以同时运行 ...
- ASM:《X86汇编语言-从实模式到保护模式》第17章:保护模式下中断和异常的处理与抢占式多任务
★PART1:中断和异常概述 1. 中断(Interrupt) 中断包括硬件中断和软中断.硬件中断是由外围设备发出的中断信号引发的,以请求处理器提供服务.当I/O接口发出中断请求的时候,会被像8259 ...
- x86架构:保护模式下利用中断实现抢占式多任务运行
站在用户角度考虑,一个合格的操作系统即使在单核下也能 "同时" 执行多个任务,这就要求CPU以非常快的频率在不同任务之间切换,让普通人根本感觉不到任务的切换.windwo ...
- [lua]再版jobSchedule与脚本描述范型
首先贴上代码 -- CPM:关键路径法(Critical Path Method) jobSchedule = { todos = { -- todo list ... ["finale&q ...
- Windows消息机制要点
1. 窗口过程 每个窗口会有一个称为窗口过程的回调函数(WndProc),它带有四个参数,分别为:窗口句柄(Window Handle),消息ID(Message ID),和两个消息参数(wP ...
- 转:Windows消息机制要点
Windows消息机制要点 1. 窗口过程 每个窗口会有一个称为窗口过程的回调函数(WndProc),它带有四个参数,分别为:窗口句柄(Window Handle),消息ID(Message ...
- DUI-Windows消息机制要点(34篇)
[隐藏] 1窗口过程概念 2消息类型 2.1系统定义消息 2.1.1窗口消息 2.1.2命令消息 2.1.3控件通知消息 2.1.4程序定义消息 3消息队列 3.1系统消息队列 3.2线程消息队列 4 ...
随机推荐
- vijosP1629 八
vijosP1629 八 链接:https://vijos.org/p/1629 [思路] 暴力容斥(看他们都这么叫=_=)+精度选择. 总体思路是先统计LR区间内满足是8倍数的数目ans,再从ans ...
- jQuery技术内幕预览版.pdf2
第二章 构造jQuery对象 jQuery对象是一个类数组对象,含有连续的整型属性.length属性和大量的jQuery方法,$()是jQuery()的缩写 构造函数jQuery() 如果调用构造函数 ...
- 【python自动化第五篇:python入门进阶】
今天内容: 模块的定义 导入方法 import的本质 导入优化 模块分类 模块介绍 一.模块定义: 用来在逻辑上组织python代码(变量,函数,逻辑,类):本质就是为了实现一个功能(就是以.py结尾 ...
- PAT 1004. Counting Leaves (30)
A family hierarchy is usually presented by a pedigree tree. Your job is to count those family membe ...
- QinQ封装及终结详解
以下内容摘自正在当当网.京东网.卓越网.互动出版网预售,即将正式发售的<华为交换机学习指南>一书(全书近千页).本书是由华为官方授权,国内第一本,也是唯一一本华为交换机权威学习指南,是华为 ...
- springsecurity4+springboot 实现remember-me 发现springsecurity 的BUG
前言:现在开发中,记住我这个功能是普遍的,用户不可能每次登录都要输入用户名密码.昨天准备用spring security的记住我功能,各种坑啊,吐血 . 先看下具体实现吧. spring securi ...
- 之前学习wordpress的几张图片
- 显示、隐藏 PowerShell
以下是一个快速实现该需求的 module.只要将以下代码复制粘贴到 Documents\WindowsPowerShell\Packages\PowerShell\PowerShell.psm1 即可 ...
- Matlab mex编程
经典教程:mex 编程 http://classes.soe.ucsc.edu/ee264/Fall11/cmex.pdf Matlab 快速编程: http://www.ee.columbia.ed ...
- hibernate.hbm.xml配置文件内容说明
下面是一个自动生成的配置文件: <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PU ...