当前位置: 首页 > news >正文

Lua--协同线程与文件IO

协同线程

Lua中有一种特殊的线程,称为coroutine,协同线程,简称协程。

其可以在运行时暂停执行,然后转去执行其他线程,然后可以返回再继续执行没完成的内容。即可以“走走停停,停停走走”。

任意时刻只会有一个协程执行,不会出现多个协程同时执行的情况。

协同线程的类型为thread,其启动、暂停、重启等,通过函数来控制,具体方法如下:

-- 创建一个协同线程实例 co = coroutine.create(function(a,b) print(a,b,a+b) -- 获取正在运行的协同线程实例 local co = coroutine.running() -- 输出协同线程实例的状态 print(coroutine.status(co)) -- 将当前协同线程挂起 coroutine.yield() print("协同线程恢复了") end) -- 启动协同线程 coroutine.resume(co,1,2) -- 输出协同线程的状态 print("主线程查看协同线程状态:"..coroutine.status(co)) -- 恢复协同线程的运行,不传后面的参数了,因为协同线程已经挂起了 coroutine.resume(co) -- 输出协同线程的状态 print("主线程查看协同线程状态:"..coroutine.status(co))

运行结果如下:

协同函数

协同线程可以单独创建执行,也可以通过协同函数调用启动执行。

使用coroutine的wrap()函数创建的就是协同函数,类型为function。

协同函数的调用会启动其内置的协同线程。

-- 创建一个协同函数 co = coroutine.wrap(function(a,b) print(a,b,a+b) local co = coroutine.running() print(coroutine.status(co)) coroutine.yield() print("协同线程恢复了") print(a,b,a+b) end) -- 调用协同函数,启动协同线程 co(1,2) co()

运行结果如下

文件IO

文件IO的函数分为两类:静态函数与实例 函数。

静态函数:通过io.xxx()方式对文件进行操作。

实例函数:通过面向对象的方式操作。

常用静态函数

  • io.open() 以指定模式打开文件,返回文件对象。

    格式:io.open(filename,mode)

    模式mod有三种:

    • r:只读,默认模式
    • w:只写,会覆盖原内容
    • a:只写,追加写入
    • +:增加符,在r+ ,w+,a+均变为了读写
    • b:二进制符,如果文件为二进制文件。则需要变为rb、wb、ab
  • io.input() 指定要读取的文件

    格式:io.input(file)

  • io.output() 指定要写入的文件

    格式:io.output(file)

  • io.read() 以指定格式读取io.input(file)中的内容。

    格式:io.read(format)

    format 的格式有:

    • *l:从当前位置的下一个位置读取整行,默认格式
    • *n:读取下一个数字
    • *a:从当前位置的下一个位置读取整个文件
    • number:这是一个数字,表示要读取的的字符的个数
  • io.write(data) 将数据data写入到io.output()中指定的文件

-- 以只读方法打开一个文件 local file = io.open("test.txt","r") io.input(file) -- 读取文件内容并输出 local content = io.read("*a") print(content) -- 关闭文件 file:close()-- 以只读方法打开一个文件 local file = io.open("test.txt","r") io.input(file) -- 读取文件内容并输出 local content = io.read("*a") print(content) -- 关闭文件 file:close() -- 以追加方法打开一个文件 local file = io.open("test.txt","a") io.output(file) -- 向文件中写入内容 io.write("这是追加的内容\n") -- 关闭文件 file:close()

常用实例函数

  • file:read() :这里的file是io.open() 返回的file,用法与io.read()相同

  • file:write():与io.write()相同

  • file:seek():获取或设置文件读写指针的位置。位置从1开始,除文件最后一行外,每行都有行结束符,其占两个字符位置。

    位置0 表示文件第一个位置。

    格式:file:seek(whence,offset)

    当seek()无参时,返回读写指针的位置。

    参数whence有三种,表示将指针定位到不同位置。

    参数offset 表示相对于whence 位置的偏移量,offset默认0,为正表示向后偏移,为负表示向前偏移。

​ whence的三种值:

1. set:将指针定位到文件开头处,即0位置处
2. cur:指针保持当前位置不变,默认
3. end:将指针定位到文件结尾处

-- 以只读方法打开一个文件 file = io.open("test.txt","r") -- 读取文件内容并输出 local content = file:read("*a") print(content) -- 关闭文件 file:close() -- 以追加方法打开一个文件 file = io.open("test.txt","a") -- 向文件中写入内容 file:write("这是追加的内容\n") -- 关闭文件 file:close() file = io.open("test.txt","r") pos= file:seek() print("当前文件指针位置:"..pos) -- 将文件指针移动到文件开头 file:seek("set",0) pos= file:seek() print("当前文件指针位置:"..pos) -- 将文件指针移动到文件末尾 file:seek("end",0) pos= file:seek() print("当前文件指针位置:"..pos)
http://www.gsyq.cn/news/1644376.html

相关文章:

  • 小红书博主都在偷偷用的AI工具,不用懂代码就能自动运营
  • 智能办公本X2:端侧AI驱动的手写语音协同工作流
  • Lua--基础入门
  • 2000+机柜怎么管?数据中心U位资产管理方案拆解
  • 完整RAG工作流达成!手把手教你使用NAS部署企业生产级AI知识库
  • 库存并发安全控制的架构设计
  • 谷歌两款AI学习工具大揭秘:NotebookLM与Learn About谁更胜一筹?
  • 别再硬写提示词了!LangChain PromptTemplate从入门到实战
  • GEO代理接单后总部负责落地吗
  • PowerShell 路径规则详解:从基础到高级
  • 2026杭州初中毕业女生暑假学什么好?选对方向比努力更重要
  • 剪映专业版教程:制作西施跳广场舞效果
  • MLflow在LLM评估中的工程实践:实现可追溯、可比较、可归因的模型管理
  • 06-高级模式与实战项目——01. Render Props - 共享渲染逻辑
  • TFT-LCD 驱动架构对比:4 种 Cs 存储电容布局的优缺点与选型指南
  • 私密科普:女性经后淋漓不尽,别当成普通经期残留
  • 机房故障换机后应急验证:24 小时 SpeedCE 点检 SOP
  • AI编程助手实战指南:从原理到应用,GitHub Copilot与Cursor深度测评
  • 白话MVP
  • Cline 配置 Claude Sonnet 5 实战指南:思考深度调优与切换 Fable 5 的时机
  • Redis--Redis分布式系统的原理与实操
  • 图最短路评测:Dijkstra 对了,也可能用错场景
  • 74LS73 异步计数器设计实战:2片芯片实现4位二进制与8421BCD电路对比
  • [特殊字符] Git 协作指南
  • Claude Code的完美国产替代小米 MiMo Code安装指南
  • CameraGraph™全域相机拓扑推理引擎 视频孪生跨镜目标连续追踪核心支撑 空间相机关系张量建模:根治跨镜头目标ID跳变、身份混淆底层算法拆解
  • 2025反爬系统深度解析:从Canvas指纹到AI行为画像的攻防实战
  • ML预测半导体良品率——样本缺失值模式分析(Python+Pandas+Matplotlib)
  • 想了解实力强的陕西GEO优化流程收费情况?这里有答案!
  • WebPShop技术方案:Photoshop插件如何填补WebP动画与专业编码的市场空白