基于事件驱动的lua--c/c++交互

Lua程序设计(六十九) 事件驱动式编程 传统的事件驱动编程伴随的典型问题就衍生自who-is-the-boss问题。在典型的事件驱动平台下,一个外部的实体向我们程序中的事件循环(event loop)或运行循环(run loop)生成事件。我们的程序变成了事件循环的附属品,使得我们的程序成为了一组无须任何显式关联的,相互独立的事件处理程序的集合。 假设有一个与libuv类似的异步I/O库,该库中有四个与我们的示例有关的函... 阅读详情

       PS:参考自《lua游戏开发指南》

       事件驱动的程序可以增强系统的可扩展性——lua游戏开发指南原话

       书中的事件驱动程序主要分为几个重要的部分,是lua与c/++的双向交互。

               1、提供一个luaGlue函数在lua中注册事件处理函数。

                2、c/c++代码获取事件处理函数名称,在c/c++中调用lua编写的事件处理函数。

                3、必须保证lua与c/c++中事件id的一致。


        lua代码:

EVENT_SAMPLE = 1000
RegisterEvent("EventHandler")
function EventHandler( id, ...)
	myFile = io.open( "io.lua", "w" )
	myFile:write("ddddd")
	if id == EVENT_SAMPLE then
		myFile:write( "sample event!!! ")
	end
	io.close(myFile)
end

       c++代码:

//基于事件消息驱动的lua-c/c++交互模型

/*--
----lua利用luaGlue函数注册事件
----c/c++调用lua函数执行事件
--*/


#include <iostream>
#include <string>

extern "C"
{
#include <lua\lua.h>
#include <lua\lualib.h>
#include <lua\lauxlib.h>
}


//定义时间id,注意与lua一致
#define EVENT_SAMPLE 1000

std::string g_strEventHandler = "";

extern "C"
{
//lua事件处理函数注册的luaGlue函数
int _RegisterEvent( lua_State* L )
{
	g_strEventHandler = luaL_optstring( L, 1, "" );  //取得第一个参数。
	return 0;
}
}

//c++发出调用
void FireEvent( lua_State*L, int id )
{
	if( g_strEventHandler != "" )
	{
		char buf[254];
		sprintf( buf, "%s(%d)", g_strEventHandler.c_str(), id );
		int err = luaL_dostring( L, buf ); //调用lua程序块
		//std::string errStr = lua_tostring( L, -1 );
		
	}
}

int main()
{
	lua_State* L = lua_open();
	luaL_openlibs( L );
	//lua_register( L, "RegisterEvent", _RegisterEvent);
	lua_pushcfunction( L, _RegisterEvent );
	lua_setglobal( L, "RegisterEvent" );
	luaL_dofile( L,"eventDriven.lua" );
	FireEvent( L, 1000 );
	return 0;
}

        编译执行c++程序,将看到io.lua中显示如下:



           后记:唉,好忧伤,效率好低,各种各样的事情总是让你无法静下心来,也有自己意志不够强的原因,晚上总是很想睡觉。。囧,剩下的时间估计也不多了,至少得吧把lua和opengl给过一遍。还有操作系统,c++,windows网络编程模型的什么的....还有毕设开题,也得赶快有个说法....唉~,~好忧伤                

                                               The end~~~~~~~~

第3章:开发者LUA脚本接口教程 开发者在创作地图时要实现的各种,依赖于迷你世界提供的一系列;玩法的运行又依赖于一系列。比如一个简单的玩法:“像这样,是进行玩法创作的基本形式。”可以在下面事件列表里查询,“”可以根据需要自行处理,“”一般就要用到各种接口了。每个接口相当于一个,调用之后可以进行各种,组合起来就可以实现各种。比如上面例子里,“”,我们需要“result:0成功 1001失败x,y,z:要设置的坐标blockid:要设置的方块iddata:要设置的方块数据也就是说,只要调用这个接口,传入和。 阅读详情

相关推荐

Lua与C/C++交互——Lua调用C/C++

Lua与C/C++交互——Lua调用C/C++ 0.简介          Lua(念“鲁啊”)作为一门发展成熟的脚本语言,正在变得越来越流行。它也可以作为和C/C++执行脚本交互的语言。并且Lua的整个库很小,我安装了最新的正式版Lua 5.1版本,而整个静态链接的lu

牧秦丶 1万+

探秘lua-ev:轻量级事件驱动编程的利器

探秘lua-ev:轻量级事件驱动编程的利器 lua-evLua integration with libev.项目地址:https://gitcode.com/gh_mirrors/lu/lua-ev 项目简介 lua-ev 是一个针对 Lua 的轻量级事件库,它提供了基于 libev 库的事件驱动功能。通过这个库,开发者可以在 Lua 中实现高性能、低延迟的网络和系统事件处理。该项目简单易用,...

gitblog_00061的博客 554

Lua与宿主语言(C/C++)交互原理

Lua语言可研究的东西真是多,各种机制原理:与宿主语言(下文均指C/C++)的交互、内存管理(垃圾回收)、虚拟机实现、协程、闭包、异常捕获机制等。如取其一进行研究,要吃透还是需要点时间和精力。相信只要一点点慢慢啃,终究还是会将其吸收。 以下的相关原理介绍是基于Lua-5.1.5版本的源码,不排除与之后版本的源码中有少部分差异存在,但基本原理应该相同。

Jonny 8027

lua-events

events.lua module('model',package.seeall) t_events = { ["on_dlg_opened"] = {} ,["on_dlg_closed"] = {} ,['guide'] = {} ,["on_page_opened"] = {} } --register_event --event:event name

xiaoben_mao的专栏 999

lua和c/c++交互

lua 和c采用虚拟栈的方式传递数据,栈中的元素是以lua 数据结构的方式存储,

Waorange的博客 1598

【lua】使用 tolua 实现 lua 与 c++ 交互

tolua 也叫 tolua++,是一个第三方库,简化了 lua 访问 c/c++ 的工作。tolua 自动导出 c/c++ 中的常量、变量、函数、类等,提供给 lua 直接访问和调用。lua 与 c 是可以直接相互访问的,不使用 tolua 或其它第三方库也可以实现 lua 调用 c/c++,但比较麻烦,开发效率太低。

xingxinmanong的博客 6328

事件驱动程序解析——Lua实现

lua事件驱动程序复杂设计的解析。

Dr_Jack的博客 590

Lua常用C API与C/C++交互

“Lua handles a chunk as the body of an anonymous function with a variable number of arguments”这是Lua对chunk也就是lua文件的处理方式,就是认为是一个可变参数的匿名函数。也就是说,调用后栈上有一个匿名函数,这个函数的body就是文件中所有的内容。

悦分享 1213

【最详细易懂】C++和Lua交互总结

一、Lua与C++的交互机制——Lua堆栈 Lua和C++ 的交互机制的基础在于Lua提供了一个虚拟栈,C++ 和Lua之间的所有类型的数据交换都通过这个栈完成。无论何时C++想从Lua中调用一个值,被请求的值将会被压入栈,无论何时C++想要传递一个值给Lua,首先将整个值压栈,然后就可以在Lua中调用。 Lua中,对虚拟栈提供正向索引和反向索引两种索引方式,区别是:正数索引1永远表示栈底,...

qq826364410的专栏 1万+

lua代码-lua监听事件

lua代码-lua监听事件

Yakit实战:利用验证码识别插件突破Webfuzzer自动化测试瓶颈

本文详细介绍了如何利用Yakit的Webfuzzer模块结合验证码识别插件,突破自动化安全测试中的验证码瓶颈。通过实战演示,讲解了如何部署本地OCR服务、编写热加载脚本,实现从获取验证码到自动识别并替换的全流程自动化,从而让Webfuzzer能够高效、无人值守地进行大规模密码喷洒等测试。

weixin_29323493的博客 282

Lua与C/C++交互——C/C++调用Lua脚本

Lua与C/C++交互——C/C++调用Lua脚本

牧秦丶 8896

HRnet的pytorch实现

HRnet的pytorch实现

奋土的博客 1951

lua—C/C++lua嵌入式开发

lua——C/C++lua嵌入式开发一、lua定位——C/C++嵌入式脚本语言二、数据类型——table三、协程下面重点说一下Lua与C/C++之间的交互【一】基本配置【二】进行交互【三】获取Lua参数【四】调用lua方法【五】lua调用C++函数VS运行截图 原文链接:https://blog.youkuaiyun.com/sm9sun/article/details/68946343 首先介绍一下Lua语言,Lua 是一个小巧的脚本语言,该语言的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

宁静致远的博客 5224

Cadence Allegro PCB文件对比实战:3分钟搞定两份设计差异(附颜色标注技巧)

本文详细介绍了如何高效使用Cadence Allegro的Design Compare功能进行PCB文件差异对比。通过实战工作流,可在3分钟内精准定位并理解两份设计在布局、布线、元件等方面的关键差异,并分享了自定义颜色标注技巧,帮助工程师快速聚焦重要修改,提升设计评审与团队协作效率。

weixin_29248653的博客 377

别再只跑Demo了!用MovieLens数据集完整复现一个电影推荐系统(Python/Pandas实战)

本文详细介绍了如何利用MovieLens数据集从零构建一个完整的电影推荐系统,涵盖数据清洗、特征工程、推荐算法实现(协同过滤和矩阵分解)以及Web服务部署的全流程。通过Python和Pandas实战,读者可以掌握推荐系统的核心技术和生产环境部署技巧,不再局限于简单的Demo运行。

weixin_29062865的博客 149

Lua封装&C++实践(一)——Lua和C/C++的基本交互

Lua 是一个小巧的脚本语言,它本身就是作为嵌入脚本而设计的,在目前所有脚本引擎中,Lua的速度是最快的。而且它的解释器非常轻量,其解释器不过200k(不同版本可能略有差异)。 Lua项目包含许多技术点,花些时间研究可以有不少收获,学到很多东西。包括与宿主语言的交互、内存管理、虚拟机实现、协程、闭包、异常捕获机制等等,后续有时间慢慢研究下。 如题所示,本系列主要记录Lua封装相关笔记,主要是记录C...

偶尔记录的一些学习笔记 3115

TCP Reno/CUBIC 拥塞控制算法对比:从 Tahoe 到 BBR 的 4 种核心策略演进

本文深入解析了TCP拥塞控制算法的演进历程,从经典的Tahoe、Reno到现代的CUBIC和BBR,详细对比了4种核心策略的实现机制与性能差异。通过分析拥塞窗口、流量控制等关键技术,揭示了不同算法在高带宽延迟网络中的优化方向,为网络协议栈优化提供理论依据和实践指导。

weixin_33725239的博客 439

Lua C++交互机制

一、Lua与C++的交互机制——Lua堆栈1)交互机制Lua和C++ 的交互机制的基础在于Lua提供了一个虚拟栈,C++ 和Lua之间的所有类型的数据交换都通过这个栈完成 栈中每个元素都能保存任何类型的Lua值(实际上Lua的任何类型的值包括字符串、表等等,最终都是以TValue这种数据结构来保存的) 当在C代码中要获取Lua的一个值的时候,只需要调用Lua API将指定值压入栈中,C再获取栈顶

赞美月亮的专栏 8495

lp–mspm0g3507开发板进入低功耗模式怎么退出?烧程序烧着烧着就进来了,跳线帽没动过,且报错:Texas Instruments Debugger Error: DAP Co...如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1568

客服转人工率直降60%!OpenClaw深度集成NLP引擎,打造企业级对话自动化智能客服系统

本文介绍了一套基于OpenClaw智能体框架和NLP大模型引擎的智能客服系统解决方案。该系统通过深度集成NLP引擎实现精准语义理解,采用分层架构设计支持多渠道接入和业务系统对接,显著提升了客服效率。核心亮点包括:92%的重复问题自动解决率,60%的转人工率下降,40%的人力成本降低,以及从30秒压缩至0.5秒的平均响应时长。文章详细阐述了技术选型、系统架构设计、核心模块实现等关键环节,展示了如何通过智能对话系统破解传统客服业务中的人力资源与服务质量矛盾。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 361

C++和Lua交互总结

Lua和C++是通过一个虚拟栈来交互通信的。由C++先把函数名、变量名、table中键放入栈中,然后把函数名、变量名、table中键出栈,并返回对应的值到栈顶,再由栈顶返回C++。Lua调C++:**Lua调用C++的函数:**先把普通的C++函数包装成Lua_CFunction格式,然后注册函数到Lua解释器中,然后由Lua去调用这个模块的函数。

宁静致远的博客 3477

Word2vec核心模型精讲:CBOW与Skip-gram

Word2vec是Google提出的词向量模型,通过CBOW和Skip-gram两种神经网络架构将词汇映射到低维向量空间。CBOW通过上下文预测中心词,训练速度快但高频词表现更好;Skip-gram则相反,通过中心词预测上下文,适合处理生僻词。为解决softmax计算效率问题,Word2vec引入基于哈夫曼树的Hierarchical Softmax优化技术,将复杂度从O(V)降至O(logV)。文章详细解析了两种模型的原理差异,并演示了哈夫曼树的构造过程及其在词向量训练中的关键作用,这种结合词频的优

Trisyp的博客 528

【Lua之·Lua与C/C++交互·Lua CAPI访问栈操作】

Lua是一种轻量级的、高性能的脚本语言,经常被用于游戏开发、嵌入式系统和其他需要灵活、可扩展的脚本功能的应用程序中。Lua是一种解释型语言,它具有简单的语法和动态类型系统,使得它易于学习和使用。它的设计目标是成为一种嵌入式脚本语言,在C/C++程序中作为库使用。这使得Lua非常适用于游戏开发,因为它可以与其他编程语言结合使用,提供灵活的脚本功能。Lua的另一个重要特点是它的高性能。与其他动态语言相比,Lua的执行速度非常快,这得益于它的精简设计和高度优化的虚拟机。

m0_66203017的博客 1952

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C/C++编程:Lua与C/C++的交互

Lua是一门动态脚本语言,运行依托于宿主语言,可以是C、C++、C#、golang等,只要实现了Lua解释器就可以。所以,Lua从设计来讲就是动态脚本语言,正是因为它是解释性语言,所以它更充当了这些宿主语言的“缝合”作用,是为“胶水”性语言 准备 在Linux系统安装Lua,使用下面的命令下载并生成Lua程序: $ wget http://www.lua.org/ftp/lua-5.2.3.tar.gz $ tar zxf lua-5.2.3.tar.gz $ cd lua-5.2.3 $ make lin

OceanStar的博客 961

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Lua中的table数据类型及其与C/C++的交互

table是Lua中唯一的数据结构机制,它实现了关联数组(associative arrays),可以用于表示普通数组、序列、符号表、集合、记录、图、树等多种数据结构。

weixin_42849849的博客 1175

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: luaGlue函数——lua中调用c/c++函数
下一篇: OpenGL学习日记-2014.11.6--OpenGL缓冲区对象
CoderLing
博客等级 码龄15年 40粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值