LUA延时控制

2023-11-16

与C++交互实现

通过C++提供Sleep函数给LUA调用即可,可以任意实现。比如超过5秒再提示相应倒计时功能。

if(funName == L"Sleep") {
	if(lua->CheckParamCount(params, 1)) {
		int sleepMs = lua->ParseInt(THelper::GetLuaParamAt(params, 0));
		DWORD startMoment = GetTickCount();
		int second = 0, total = sleepMs / 1000, lastSecond = 0;
		while(GetTickCount() < startMoment + sleepMs) {
			second = (GetTickCount() - startMoment) / 1000;
			if(sleepMs > 5000 && (second != lastSecond)) {
				lua->LogInfo(THelper::FormatString(L"倒计时: %d 秒", total - second));
				lastSecond = second;
			}
			THelper::Util::Delay(100);
		}
	}
}

如果还希望达到毫秒级控制,用C++也表示毫无压力

其它可参考方式

网上资源比较多。如

Lua封装延时执行函数

https://blog.csdn.net/zhenyu5211314/article/details/50437901
延时执行函数

function delayTimeGuideEvent( target, func, times )
    -- 延迟时间执行函数
    local delaytime = 1
    if times then delaytime = times end
    getRoot(target):runAction(CCSequence:createWithTwoActions(CCDelayTime:create(delaytime), CCCallFunc:create(func)))
end

LUA的延时调用功能

https://blog.csdn.net/yejian2011/article/details/41173031

-- 延时 0.2 关闭 

    local schedulerEntry = nil

    local    scheduler = cc.Director:getInstance():getScheduler()

    local function removeLayer(time)

        scheduler:unscheduleScriptEntry(schedulerEntry)

        schedulerEntry = nil

        layer:removeFromParentAndCleanup(true)   

    end

    schedulerEntry = scheduler:scheduleScriptFunc(removeLayer, 0.2, false)

Sleep Function

http://lua-users.org/wiki/SleepFunction

A common need is to pause (sleep) a program for a certain number of seconds, preferably without busy waiting.
This function to do this without busy waiting does not exist in ANSI C, so it does not exist in stock Lua. However, there are extension libraries and calls to external programs that can do this.

Solution: Busy Wait
local clock = os.clock
function sleep(n) – seconds
local t0 = clock()
while clock() - t0 <= n do end
end
– warning: clock can eventually wrap around for sufficiently large n
– (whose value is platform dependent). Even for n == 1, clock() - t0
– might become negative on the second that clock wraps.
Solution: C extension
There is a sleep function in ExtensionProposal. This may call Win32 Sleep or POSIX usleep. Here’s a [usleep/sleep C wrapper] example.
The LuaApr binding has an [apr.sleep()] function that works on Windows & UNIX and supports sub-second resolution.
The lalarm library[1] can set an alarm on POSIX.
winapi (Windows only) has a [sleep] function. [github]
If an FFI interface (Alien or c/invoke – BindingCodeToLua) is available, you can call whichever OS function you have.
Solution: sleep command
function sleep(n)
os.execute("sleep " … tonumber(n))
end
Windows does not have such a built-in command. However, there’s a sleep in the Windows Server Resource Kit. There is also sleep in Cygwin and MinGW. Also, there is “timeout” utility available in Windows 7
os.execute("timeout " … tonumber(n)) – specific to win7 (and probably higher)
Solution: ping or other programs
function sleep(n)
if n > 0 then os.execute(“ping -n " … tonumber(n+1) … " localhost > NUL”) end
end
– version 20100715 - fixed off-by-one second
This is mainly for Windows in the absence of a sleep command. Other variations exist, e.g. “perl -e 'sleep(” … tonumber(n) … “)’” or “php -r sleep(” … tonumber(n) … “);”.
Solution: I/O wait
io.stdin:read’*l’
This is not a sleep but may be useful in similar cases. It waits for the user to press the Enter key.
Solution: Using WScript (Windows)
function sleep(n)
local vb = “test.vbs”
local f = assert(io.open(vb,“w”))
f:write(“WScript.Sleep(” … (tonumber(n) * 1000) … “)\n”)
f:close()
os.execute(vb)
end
See [2].
Solution: sleep()
The POSIX sleep() call provides integer second sleeps.
require “posix”
posix.sleep(3)
Solution: socket.sleep()
The LuaSocket? module provides a sleep function.
socket = require(“socket”)
function sleep(sec)
socket.sleep(sec)
end
sleep(0.2)
Solution: ngx.sleep()
Nginx Lua module provides a sleep function. One can specify time resolution up to 0.001 seconds (i.e., one milliseconds). Behind the scene, this method makes use of the Nginx timers.
ngx.sleep(sec)
Solution: lsocket.select()
The select() timeout provides a fairly portable sub-second sleep, if you can tolerate the socket library dependency.
local lsocket = require(“lsocket”)
function sleep(sec)
lsocket.select(sec)
end
sleep(2)
Solution: LuaJIT FFI/LuaFFI
local ffi = require “ffi”
ffi.cdef “unsigned int sleep(unsigned int seconds);”
ffi.C.sleep(2)
Solution: os.time()
function sleep(s)
local ntime = os.time() + s
repeat until os.time() > ntime
end
Solution: os.clock()
. .
Using the os.clock() method instead of os.time(), you can get precision down to one 100th of a second while os.time() only allows intervals based on the timestamp, which at execution can be at anything from 0.1 to 1 second. The os.time() method is great for longer periods over 2 seconds where precision isn’t that much of a deal.

function sleep(s)
local ntime = os.clock() + s/10
repeat until os.clock() > ntime
end

没细品,后续再研究

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LUA延时控制 的相关文章

  • 【满分】【华为OD机试真题2023 JS】找数字

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 找数字 知识点哈希表 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 给一个二维数组nums 对于每一个元素num i 找出距离最近的且值相等的元素 输出横纵坐标
  • sci期刊投稿指南 计算机科学 人工智能方向 145本sci期刊目录 从一区到四区(2022年 最新影响因子更新了)

    SCI期刊投稿指南 计算机科学 人工智能方向 140本sci期刊目录 从一区到四区总有一本适合你 有时候论文写好了 却不知道人工智能方向有哪些期刊可以投稿 自己也不知道哪里找 这里为大家罗列了当前人工智能方向可以投稿的145本SCI期刊 方
  • 【图形与渲染】相机平面镜反射与斜裁剪矩阵(下)-斜裁剪矩阵

    上一篇文章分析了平面镜反射效果实现中 如何计算镜像矩阵 我们已经可以得到镜像相机并渲染出镜像后的效果了 但是只是纯粹的镜像会遇到以下问题 如图 当相机镜像到C 位置后 其视锥体裁剪范围是A B 但实际应该位于反射贴图中的区域仅仅只有A区域
  • linux ssh如何设置登陆超时与不超时方法

    通过ssh登录linux服务器 如果一段时间不操作的话 就会超时断开连接 下面讲一下linux ssh登陆不超时设置 ssh登陆不超时设置 修改 etc ssh sshd config为 ClientAliveInterval 60 Cli
  • 虚拟服务器不好用,哪些网站不能使用虚拟主机

    哪些网站不能用虚拟空间或者虚拟主机呢 为何呢 今天我们来看看不适合使用虚拟主机的几类网站 和云服务器 独立主机相比 虚拟主机几乎没有技术门槛 操作简单 更易上手 不过由于价格便宜 配置偏低 也存在一定的局限性 并非任何类型的网站都适合使用
  • SCI 美国《科学引文索引》(Science Citation Index, 简称 SCI )

    科学引文索引 编辑锁定同义词SCI 科学引文索引 一般指科学引文索引 美国 科学引文索引 Science Citation Index 简称 SCI 于1957 年由 美国科学信息研究所 Institute for Scientific I
  • 当学生的两门课成绩分别为X,Y,按下面要求分类输出学生的成绩评定。 (C语言)

    要求 1 如果两门都大于等于90 则输出优秀 2 如果两门都大于等于80 则输出良好 3 如果两门都大于等于60 则输出合格 4 如果有一门不合格 则输出不合格 5 如果两门都不合格 则输出很差 分析 假设成绩的范围是0 100 所以要先判
  • 史上最全的最通俗易懂的-jmeter调试错误全集

    一 前言 在使用jmeter做接口测试的过程中大家是不是经常会遇到很多问题 但是无从下手 不知道从哪里开始找起 对于初学者而言这是一个非常头痛的事情 这里结合笔者的经验 总结出以下方法 二 通过查看运行日志调试问题 写好脚本后 可以先试着运
  • 原码、反码、补码的讲解

    本文主要介绍原码 反码 补码的计算方法以及意义 阅读此文需要知道十进制与二进制的转换法则 需要的可看此文 待补充 一 原码 反码 补码存在的意义 首先要知道的是 1 整型的数据在内存中都以补码的形式进行存储 目的是便于进行运算等操作 2 正
  • 网页连接数据库,一个简单的登入界面以及实现登入功能

    基于V 的ASP NET MVC 4 web 网站程序开发 接着上篇继续 上篇地址为https blog csdn net weixin 42534390 article details 86576537 我们首先要有一个认知 就是ASP
  • 反思自己问题分享

    学习上出现的问题 一直在学习却忘了放慢脚步 导致学的太快 不扎实 JavaSE浅部知识确实很简单 如果去深度刨析里面更深一层知识后会花很长时间 现在我们掌握的 SE 知识点只能算是会用 学过后没有过多去实践 找各种借口翻篇 如 观看学习视频
  • 计算广告读书笔记

    计算广告 广告主 媒体 用户 用户画像 ROI 进化 合约广告 多个合约在线分配问题 gt 竞价广告 交易终端TD 广告网络ADN gt 实时竞价RTB 广告交易平台ADX 需求方平台DSP 品牌广告 效果广告 点击率CTR 点击价值 到达
  • livecd简介

    LiveOS image Fedora Project Wiki Fedora Workstation Live iso mount EFI image isolinux LiveOS squashfs img mount LiveOS r
  • 三种常用的朴素贝叶斯实现算法——高斯朴素贝叶斯、伯努利朴素贝叶斯、多项式朴素贝叶斯

    在sklearn中 提供了若干种朴素贝叶斯的实现算法 不同的朴素贝叶斯算法 主要是对P xi y 的分布假设不同 进而采用不同的参数估计方式 我们能够发现 朴素贝叶斯算法 主要就是计算P xi y 一旦P xi y 确定 最终属于每个类别的
  • 入门解决迷宫问题和算法DFS(递归+回溯)(C语言)

    代码中用for语句代用了下面的4个if语句 include
  • c 语言 多实例测试

    题目描述 求n个整数的和 输入 输入第一行是一个整数T 表示有T组测试实例 每组输入包括两行 第一行一个数n表示接下来会有n个整数 第二行空格隔开的n个数 输出 对于每组输入 在一行输出n个数的和 保证和不会超出int类型的范围 样例输入
  • Vue项目中的富文本插件表格、字号相关问题

    vue quill editor字号自定义 在近日开发项目过程中需要用到富文本 不过样式和工具栏需要按照需求来自定义 我首先想到的是用vue quill editor 不过vue quill editor的字号是以large small这类
  • FileInputFormat详解

    转载 http blog csdn net hellozpc article details 45771933 https my oschina net leejun2005 blog 133424 1 概述 我们在设置MapReduce输
  • ThinkPhp5.1快速创建模块

    快速生成模块 生成一个test模块的指令如下 gt php think build module test 表示自动生成test模块 自动生成的模块目录包含了config controller model和view目录以及common ph
  • 【内存泄漏】- 4. 使用python的gc+pyrasite模块检测python内存泄漏

    Python内存泄漏测试 1 Python内存泄漏处理机制 为了解决内存泄漏的问题 Python2 0的版本开始引入 引用计数 并基于引用计数实现了自动垃圾收集 后来为了解决循环引用导致内存泄漏的问题 又引入 标记 清除 分代回收 机制 P

随机推荐

  • Java实现图片上传

    使用 IDEA 软件 实现文件上传 结合JSP form表单及Servlet 实现文件上传 一 JSP界面 HTML界面 配置 实现文件上传需要配置form表单 基本设置 其中固定两个值是 提交方式只能为post enctype是固定的
  • 瑞萨电子TPS-1教学-第一讲TPS-1 PROFINET Demo Board概述 视频

    瑞萨电子TPS 1教学 第一讲TPS 1 PROFINET Demo Board概述 Renesas
  • 【深度好文】企业数字化转型的核心要素及能力架构分析

    数字化转型究竟是什么 首先我们还是摘录下百度词条上对数字化转型的一个简单说明如下 数字化转型是建立在数字化转换和数字化升级基础上 进一步触及公司核心业务 以新建一种商业模式为目标的高层次转型 数字化转型是开发数字化技术及支持能力以新建一个富
  • 72. Edit Distance

    Given two words word1 and word2 find the minimum number of steps required to convert word1 to word2 each operation is co
  • Self-attention计算方法

    三个矩阵 首先 Inputs为x1 x4 是一个sequence 每一个Input先通过一个Embedding 乘上一个Matrix得到 a1 a4 然后放入self attention 在self attention当中 每一个Input
  • Qt中的C++指针

    Qt中的C 指针 q ptr 在私有类中定义一个名字为q ptr 类型为公有类的数据指针 通过这个指针来访问公有类的数据 d ptr 在公有类中定义一个名字为d ptr 类型为私有类的数据指针 通过这个指针来访问私有类的数据 具体定义在qg
  • C语言

    要求设计的管理系统能够实现以下功能 1 每一条记录包括一个学生的学号 姓名 3个成绩 平时成绩 作业成绩 考试成绩 2 成绩录入功能 成绩信息用文件保存 可以一次完成若干条记录 3 成绩信息显示浏览功能 完成全部学生记录的显示 4 查询功能
  • elasticsearch 集群no known master node

    为什么80 的码农都做不了架构师 gt gt gt It is usually handled automatically If autodiscovery doesn t work Edit the elastic search conf
  • 装饰器在js中的实现原理

    在项目中总是能看到 connect Debounce 巴拉巴拉 通过百度才知道它叫做装饰器 装饰器有什么好 比如说 当我们写好了一个组件它叫做纯洁 当时在创造它的时候我们只想让它做一件事 但是突然有人告诉你我要加一个功能 可是我又不想让我的
  • 医学图像配准软件 ANTs(Advanced Normalization Tools)的安装和使用说明

    本文是关于医学图像配准软件 ANTs Advanced Normalization Tools 的安装和使用说明 ANTs ANTs 是 Advanced Normalization Tools 的缩写 是基于 C 语言的一个医学图像处理的
  • 利用openslide-python处理病理

    参考 博客总结https www jianshu com p bd5b572b5269 官方文档 https openslide org api python module openslide 获取元信息 如每个像素有多少微米 import
  • 杭电ACM 第2036题

    include
  • Linux 定时备份mysql数据并同步到其他mysql服务器中

    备份还原操作 导出数据库 usr bin mysqldump u root pwd database gt database sql 导入数据库 mysql u root p database lt database sql 备份到压缩文件
  • Android 实现WebView

    activity main xml
  • Git首次提交代码到仓库步骤(资料)

    第一步 登陆码云 第二步 创建一个 新的项目 第三步 创建成功后到这个页面 Git 全局设置 git config global user name 意米 git config global user email 142453222851
  • 数据结构<1>时间复杂度详解和leetcode例题

    文章目录 什么是时间复杂度和空间复杂度 前言 算法效率 时间复杂度的计算 空间复杂度的计算 oj练习 什么是时间复杂度和空间复杂度 前言 算法效率 算法效率分析分为两种 第一种是时间效率 第二种是空间效率 时间效率被称为时间复杂度 而空间效
  • Java与WCF交互(一):Java客户端调用WCF服务

    第一步 生成WCF服务 新建WCF解决方案 分别添加三个项目 HelloTimeService 类库 HelloTimehost 控制台程序 HelloTimeClient 控制台程序 项目结构如图 各个项目的主要代码 service Ho
  • 无人机的基本知识

    一 无人机的定义 无人驾驶飞机是指由动力驱动 不搭载操作人员的一种空中飞行器 它依靠空气动力为飞行器提供升力 能够自主或遥控飞行 能携带多种任务设备 执行多种任务 可一次性或多次重复使用的无人驾驶航空器 简称无人机 Unmanned Aer
  • Java Web JSP开发模型

    看之前先点赞 1 JSP开发模型 为了方便使用JSP技术 SUN公司玮JSP技术提供了两种开发模型 JSP Mode1 和 JSP Mode2 JSP Mode1 JSP Mode2 我们将按照Model2思想来完成用户注册功能 1 创建项
  • LUA延时控制

    LUA延时控制 与C 交互实现 其它可参考方式 Lua封装延时执行函数 LUA的延时调用功能 Sleep Function 与C 交互实现 通过C 提供Sleep函数给LUA调用即可 可以任意实现 比如超过5秒再提示相应倒计时功能 if f