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

C++和Lua混和调用

为什么要C/C++

  • 流行的语言,学习人员多
  • 高性能,对于嵌入式设备则是省电
  • 大量的第三方库

为什么要Lua

  • C++缺点:编译慢,调试难,学习难度大
  • Lua优点:
    • 最快的脚本语言
    • 可以编译调试
    • 与C/C++结合容易
    • Lua是对性能有要求的必备脚本

lua基本语法

lua基础数据类型和变量

  • 全局变量
b = 10
  • 局部变量:尽量使用局部变量,保证变量控制
local b = 10
  • 数据类型

    • NIL

      • 用于区分具有一些数据或者没有数据的值
      • 全局变量设置为nil会交给垃圾回收
      local a = nil
      print(type(a)) --> nil
      
    • Booleans

      • Lua中所有的值都可以作为条件
      • 除了false和nil为假以外,其他的值都为真,0为真
    • Numbers

      • Lua中没有整数,都是用浮点数进行运算
      • 对应的c中的double类型
      • 新版中有基于64位的整形
      • tonumber()转换格式
    • Strings

      • tostring()格式转换
      • [[]]多行字符串赋值
      • 与C一样转义\
      • …字符串拼接
      • String 处理
        • 字符串长度string.len
        • 字符串子串string.sub(str, 3, 5)
        • 字符串查找local b,e = string.find(str, “HEAD”) 支持正则
        • 字符串替换string.gsub(str, "HEAD, “XCJ”)

lua控制结构语句

条件判断

  • if 条件语句
if conditions thentehn-part
elseif condition thenelseif-part
else else-part
end
  • 逻辑运算
    • and or not
    • < > <= >= ~= ==

循环语句

  • while循环语句
while condition dostatements
end

break 退出循环

  • repeat循环语句
repeatstatements
until conditions

break 退出循环

  • for 循环语句
/// 1
for var=from, to, step doloop-part
end
/// 2
for i,v in ipairs(a) do print(v)
end

break 退出循环

lua表和函数

lua表

  • 表的大小 table.getn(t1)
  • 插入 table.insert(a, pos, line)
    • 不传pos相当于push_back
  • 删除table.remove(a, pos)返回这次删除的值
    • 不传pos相当于pop_back
local tab1 = {"001", "002", "003"}
for i, v in ipairs(tab1) doprint(i..":"..v)
endprint("======= insert =======")
table.insert(tab1, 3, "002-2")table.insert(tab1, "004")
for i, v in ipairs(tab1) doprint(i..":"..v)
endprint("======= remove =======")
table.remove(tab1, 3)
table.remove(tab1)
for i, v in ipairs(tab1) doprint(i..":"..v)
endlocal tab1 = { id = 123, age = 20}
tab1["name"] = "aaa"
print("====== insert ======")
for k, v in pairs(tab1) doprint(k..":"..v)
endprint("====== remove ======")
tab1["id"] = nil
for k, v in pairs(tab1) doprint(k..":"..v)
endprint("====== tab3 ======")
local tab3 = {}tab3[1] = {"1", "2"}tab3[2] = {"3", "4"}
for k, v in pairs(tab3) dofor k2, v2 in pairs(v) doprint(k.."::"..k2..":"..v2)end
end

lua函数

  • 函数语法
function func_name(args)statement-list;
end
function test1(args)print(args)
end
function test2(args)return 1
end
test1(11)
print(test2(11))

lua调用C++

函数调用

#include <iostream>extern "C"
{#include "lua.h"#include "lauxlib.h"#include "lualib.h"
}int test(lua_State* L)
{printf("int test");return 0;
}int main()
{lua_State *L = lua_open();luaopen_base(L);luaopen_string(L);luaopen_table(L);lua_register(L, "test", test);luaL_loadfile(L, "main.lua");lua_pcall(L, 0, 0, 0);return 0;
}
test()

参数传递

  • 传递普通参数
#include <iostream>extern "C"
{#include "lua.h"#include "lauxlib.h"#include "lualib.h"
}int test(lua_State* L)
{printf("int test\n");size_t len;const char* str = lua_tolstring(L, 1, &len);printf("lua args %s\n", str);int age = lua_tointeger(L, 2);printf("lua args %d\n", age);return 0;
}int main()
{lua_State *L = lua_open();luaopen_base(L);luaopen_string(L);luaopen_table(L);lua_register(L, "test", test);luaL_loadfile(L, "main.lua");lua_pcall(L, 0, 0, 0);return 0;
}
test("hello lua", 123)
  • 传递数组
#include <iostream>extern "C"
{#include "lua.h"#include "lauxlib.h"#include "lualib.h"
}int test(lua_State* L)
{printf("int test\n");size_t len;const char* str = lua_tolstring(L, 1, &len);printf("lua args %s\n", str);int age = lua_tointeger(L, 2);printf("lua args %d\n", age);return 0;
}
int test_array(lua_State *L)
{printf("init test_array\n");int len = luaL_getn(L, 1);for (int i = 0; i < len; i++){lua_pushnumber(L, i + 1);lua_gettable(L, 1); // pop idx  push 压入tablesize_t len;printf("%s\n", lua_tolstring(L, -1, &len));lua_pop(L, 1);}return 0;
}int main()
{lua_State *L = lua_open();luaopen_base(L);luaopen_string(L);luaopen_table(L);lua_register(L, "test", test);lua_register(L, "test_array", test_array);luaL_loadfile(L, "main.lua");lua_pcall(L, 0, 0, 0);return 0;
}
local tab = {"001", "002", "003"}
test_array(tab)
  • 传递kv表
int test_array2(lua_State *L)
{printf("init test_array2\n");
//    lua_pushnil(L);
//    while (lua_next(L, 1) != 0)
//    {
//        printf("key = %s\n", lua_tostring(L, -2));
//        printf("value = %s\n", lua_tostring(L, -1));
//        lua_pop(L, 1);
//    }lua_getfield(L, 1, "age");printf("age = %s\n", lua_tostring(L, -1));return 0;
}
local tab = {name="xiaoming", age="22", id="007"}
test_array2(tab)
  • C++参数类型检查
int test_array2(lua_State *L)
{luaL_checktype(L, 1, LUA_TTABLE);if (lua_type(L, 2) != LUA_TNUMBER){printf("arg2 is not number\n");}printf("init test_array2\n");lua_getfield(L, 1, "age");printf("age = %s\n", lua_tostring(L, -1));return 0;
}
local tab = {name="xiaoming", age="22", id="007"}
local size = "108"
test_array2(tab, size)

返回值获取

  • C++返回值普通类型
int test_ret(lua_State *L)
{lua_pushstring(L, "test_ret");return 1;
}
print(test_ret())
  • 返回对象
int test_ret(lua_State *L)
{lua_newtable(L);lua_pushstring(L, "name");lua_pushstring(L, "zhangsan");lua_settable(L, -3);lua_pushstring(L, "age");lua_pushnumber(L, 21);lua_settable(L, -3);return 1;
}
tab = test_ret()
print(tab["name"])
print(tab["age"])

C++调用lua

全局变量访问(普通、表)

int main()
{lua_State *L = lua_open();luaopen_base(L);luaopen_string(L);luaopen_table(L);lua_register(L, "test", test);lua_register(L, "test_array", test_array);lua_register(L, "test_array2", test_array2);lua_register(L, "test_ret", test_ret);lua_pushstring(L, "hello");lua_setglobal(L, "test1_hello");lua_newtable(L);lua_pushstring(L, "name");lua_pushstring(L, "lisi");lua_settable(L, -3);lua_setglobal(L, "test1_table");if (luaL_loadfile(L, "main.lua")){const char *error = lua_tostring(L, -1);printf("lua call error: %s\n", error);return -1;}if (lua_pcall(L, 0, 0, 0)){const char *error = lua_tostring(L, -1);printf("lua call error: %s\n", error);return -1;}lua_getglobal(L, "width");int width = lua_tonumber(L, -1);lua_pop(L, 1);printf("width = %d\n", width);lua_getglobal(L, "tab1");lua_getfield(L, -1, "name");printf("%s\n", lua_tostring(L, -1));lua_getfield(L, -2, "age");printf("%d\n", (int)lua_tonumber(L, -1));lua_pop(L, 3);lua_close(L);return 0;
}
width = 20
tab1 = {name="zhangsan", age=20}
print(test1_hello)for i, v in pairs(test1_table) doprint(i..":"..v)
end

函数调用(参数,返回值)

int main()
{lua_State *L = lua_open();luaopen_base(L);luaopen_string(L);luaopen_table(L);lua_register(L, "test", test);lua_register(L, "test_array", test_array);lua_register(L, "test_array2", test_array2);lua_register(L, "test_ret", test_ret);lua_pushstring(L, "hello");lua_setglobal(L, "test1_hello");lua_newtable(L);lua_pushstring(L, "name");lua_pushstring(L, "lisi");lua_settable(L, -3);lua_setglobal(L, "test1_table");if (luaL_loadfile(L, "main.lua")){const char *error = lua_tostring(L, -1);printf("lua call error: %s\n", error);lua_pop(L, 1);}if (lua_pcall(L, 0, 0, 0)){const char *error = lua_tostring(L, -1);printf("lua call error: %s\n", error);lua_pop(L, 1);}lua_getglobal(L, "width");int width = lua_tonumber(L, -1);lua_pop(L, 1);printf("width = %d\n", width);lua_getglobal(L, "tab1");lua_getfield(L, -1, "name");printf("%s\n", lua_tostring(L, -1));lua_getfield(L, -2, "age");printf("%d\n", (int)lua_tonumber(L, -1));lua_pop(L, 3);// 调用函数lua_getglobal(L, "event");lua_pushstring(L, "key");lua_pushstring(L, "value");if (lua_pcall(L, 2, 1, 0) != 0){const char *error = lua_tostring(L, -1);printf("lua call error: %s\n", error);lua_pop(L, 1);}else{printf("lua call error: %s\n", lua_tostring(L, -1));lua_pop(L, 1);}printf("top is %d\n", lua_gettop(L));lua_close(L);return 0;
}
width = 20
tab1 = {name="zhangsan", age=20}
print(test1_hello)for i, v in pairs(test1_table) doprint(i..":"..v)
endfunction event(key, value)print("key:"..key.."  value:"..value)return "aaaaa"
endfunction event(args)for i,v in ipairs(args) doprint("key:"..i.."  value:"..v)end
end

备注: 注意栈空间清理,防止内存泄露, 防止多线程互斥问题。

相关文章:

C++和Lua混和调用

为什么要C/C 流行的语言&#xff0c;学习人员多高性能&#xff0c;对于嵌入式设备则是省电大量的第三方库 为什么要Lua C缺点&#xff1a;编译慢&#xff0c;调试难&#xff0c;学习难度大Lua优点&#xff1a; 最快的脚本语言可以编译调试与C/C结合容易Lua是对性能有要求的必…...

Cadence高速系统设计流程及工具使用

上一章已经谈到&#xff0c;在Cadence的高速设计流程中&#xff0c;有两个重要的工具SigXP和Constrain Manager&#xff08;CM约束管理器&#xff09;。SigXP是仿真分析工具和约束生成工具&#xff0c;我们就是使用这个工具对关键信号进行仿真的。SI工程师通过对仿真结果的分析…...

Unity:AddTorque()(增加旋转力矩)

目录 什么是 AddTorque()&#xff1f; 第一性原理出发&#xff1a;什么是 Torque&#xff08;力矩&#xff09;&#xff1f; Torque 公式 Unity 中 AddTorque 的工作原理 参数属性 &#x1f50d; Linear Drag&#xff08;线性阻力&#xff09; 线性阻力模拟的现实情况&…...

嵌入式硬件设计全解析:从架构到实战

一、嵌入式硬件设计核心架构与系统组成​ 1. 处理器选型与架构设计​ (1)处理器类型与应用场景​ 处理器类型​ 代表架构 / 型号​ 典型应用场景​ 核心优势​ 微控制器(MCU)​ ARM Cortex-M3/M4、STM32F 系列​ 低功耗控制、小型设备​ 集成外设、低功耗、低成本​ 微处…...

R7打卡——糖尿病预测模型优化探索

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊 1.检查GPU import torch.nn as nn import torch.nn.functional as F import torchvision,torch# 设置硬件设备&#xff0c;如果有GPU则使用&#xff0c;没有…...

win10开了移动热点,手机无法连接,解决办法(chatgpt版)

提问&#xff1a; win10连着网线上网&#xff0c;有无线网卡intel Wireless-AC 9560网卡 可以用电脑开移动热点给手机连接吗&#xff1f;如何设置&#xff1f;我现在可以开热点&#xff0c;但是手机连不上&#xff0c;显示正在获取ip地址后就连不上了 chatgpt回答&#xff1a…...

下载core5compat 模块时,被禁止,显示 - servese replied: Forbbidden. -->换镜像源

怎么解决&#xff1f; --->换镜像源 方法 1&#xff1a;使用命令行参数指定镜像源 在运行 Qt 安装器时&#xff0c;通过 --mirror 参数指定镜像源&#xff1a; # Windows qt-unified-windows-x64-online.exe --mirror https://mirrors.ustc.edu.cn/qtproject# Linux/macO…...

《MATLAB实战训练营:从入门到工业级应用》高阶挑战篇-《用无人机仿真玩转PID控制:MATLAB四旋翼仿真建模全攻略》

《MATLAB实战训练营&#xff1a;从入门到工业级应用》高阶挑战篇-✈️ 用无人机仿真玩转PID控制&#xff1a;MATLAB四旋翼仿真建模全攻略 &#x1f681; 欢迎来到这篇超级详细的MATLAB四旋翼无人机仿真教程&#xff01;无论你是控制理论爱好者、无人机发烧友&#xff0c;还是M…...

GESP2024年3月认证C++八级( 第二部分判断题(1-5))

孙子定理参考程序&#xff1a; #include <iostream> #include <vector> using namespace std;// 扩展欧几里得算法&#xff1a;用于求逆元 int extendedGCD(int a, int b, int &x, int &y) {if (b 0) {x 1; y 0;return a;}int x1, y1;int gcd extende…...

PHP的现代复兴:从脚本语言到企业级服务端引擎的演进之路-优雅草卓伊凡

PHP的现代复兴&#xff1a;从脚本语言到企业级服务端引擎的演进之路-优雅草卓伊凡 一、PHP的历史误解与现实真相 1.1 被固化的陈旧认知 当卓伊凡浏览知乎上关于PHP的讨论时&#xff0c;发现大量回答仍然停留在十年前的刻板印象中。这些误解包括但不限于&#xff1a; “PHP只…...

手表功能RunModeTasks

RunModeTasks 功能解释 “RunModeTasks 执行特定于当前模式的功能 根据模式控制作行为”这句话是指 OV-Watch 智能手表项目中的一组任务&#xff0c;这些任务负责管理设备的运行模式并根据不同模式控制设备的行为。 主要组成部分 RunModeTasks 主要由以下三个部分组成&#…...

Qt6.8中进行PDF文件读取和编辑

1.环境配置 在 .pro 文件中添加 PDF 模块依赖&#xff1a; QT core gui pdf # 添加 pdf 模块 注意&#xff1a;独立 pdf 模块的起始版本是Qt 5.15&#xff0c;建议需要 PDF 功能的开发者优先选择此版本或更高版本 2.读取PDF 文件 核心类&#xff1a;QPdfDocument&#xf…...

Barrett Reduction算法优化:更紧的界限消除冗余的减法

1. 引言 Barrett Reduction 是一种被广泛使用的模 m m m 运算算法。在zkSecurity 受NEAR团队所委托的&#xff08;针对RustCrypto: NIST P-256 (secp256r1) elliptic curve——https://github.com/RustCrypto/elliptic-curves/tree/master/p256&#xff09;进行的 Rust p256 …...

Node.js 是什么?

Node.js 是什么? Node.js 是一个基于 Chrome V8 JavaScript 引擎 的 跨平台 JavaScript 运行时环境,用于在服务器端运行 JavaScript 代码。它使开发者能够使用 JavaScript 编写后端(服务端)程序,而不仅仅局限于浏览器端(前端)。 1. Node.js 的核心特点 (1) 基于 Chrom…...

数据结构中 数组、链表、图的概念

数据结构是计算机存储、组织数据的方式&#xff0c;数组、链表和图是三种常见的数据结构&#xff0c;下面为你详细介绍它们的概念&#xff1a; 数组 数组是一种线性数据结构&#xff0c;它由一组相同类型的元素组成&#xff0c;这些元素存储在连续的内存位置上。每个元素都可…...

基于PPO的自动驾驶小车绕圈任务

1.任务介绍 任务来源: DQN: Deep Q Learning &#xff5c;自动驾驶入门&#xff08;&#xff1f;&#xff09; &#xff5c;算法与实现 任务原始代码: self-driving car 在上一篇使用了DDPG算法完成自动驾驶小车绕圈任务之后&#xff0c;继续学习了PPO算法&…...

Three.js + React 实战系列 - 客户评价区细解教程 Clients 组件✨(回答式评价 + 评分星级)

对个人主页设计和实现感兴趣的朋友可以订阅我的专栏哦&#xff01;&#xff01;谢谢大家&#xff01;&#xff01;&#xff01; 在这篇博客中&#xff0c;我们将实现一个简洁的 Hear from My Clients 客户评价区域。这个区块在个人主页中可以突显用户体验和专业度&#xff0c;帮…...

2048游戏(含Python源码)

前言 相关参考游戏&#xff1a; 像素飞机大战&#xff08;含Python源码&#xff09;-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/147693018?spm1001.2014.3001.5501使用DeepSeek定制Python小游戏——以“俄罗斯方块”为例-CSDN博客https://blog.csdn.n…...

百度golang开发一面

讲一下数据库的事务机制&#xff1f;acid特性是靠什么实现的&#xff1f; 持久性 redo log 原子性 undo log 隔离性 MVCC或next-lock锁 四个隔离级别是什么&#xff0c;分别解决什么问题&#xff1f; 可串行化实现原理 mysql锁机制&#xff1f;介绍锁的类型&#xff0c;以及原理…...

【Springboot知识】Springboot计划任务Schedule详解

文章目录 Spring Boot 定时任务从原理到实现详解一、核心原理分析1. 架构分层2. 核心组件3. 线程模型 二、基础实现步骤1. 添加依赖2. 主类配置3. 定时任务类 三、高级配置技巧1. 自定义线程池2. 动态配置参数3. 分布式锁集成&#xff08;Redis示例&#xff09; 四、异常处理机…...

大模型推理--从零搭建大模型推理服务器:硬件选购、Ubuntu双系统安装与环境配置

自从大模型火了之后就一直想自己组装一台机器去深入研究一下大模型&#xff0c;奈何囊中羞涩&#xff0c;迟迟也没有行动。在下了很大的勇气之后&#xff0c;终于花了接近4万块钱组装了一台台式机&#xff0c;下面给大家详细介绍一下我的装机过程。 1.硬件配置 研究了一周&am…...

如何使用QWidgets设计一个类似于Web Toast的控件?

如何使用QWidgets设计一个类似于Web Toast的控件&#xff1f; 前言 ​ 笔者这段时间沉迷于给我的下位机I.MX6ULL做桌面&#xff0c;这里抽空更新一下QT的东西。这篇文章是跟随CCMoveWidget一样的文章&#xff0c;尝试分享自己如何书写这份代码的思考的过程&#xff0c;和笔者…...

博图V20编译报错:备不受支持,无法编译。请更改为受支持的设备。

使用高版本博图打开低版本博图的工程文件时&#xff0c;hmi编译报错不通过&#xff0c;报错提示&#xff1a;备不受支持&#xff0c;无法编译。请更改为受支持的设备。 原因&#xff1a;当前版本的博图软件没有或不支持该组态设备的固件版本。 解决办法&#xff1a;1、安装报错…...

凸性(Convexity)

凸性&#xff08;Convexity&#xff09;是一个跨学科的重要概念&#xff0c;广泛应用于数学、优化理论、金融等领域。其核心含义是描述某种结构&#xff08;如函数、集合&#xff09;在特定条件下的“无凹陷”性质。 1. 数学中的凸性 1.1 凸函数与凹函数 在数学分析中&#…...

Vuex使用指南:状态管理

一、什么是状态管理&#xff1f;为什么需要 Vuex&#xff1f; 1. 状态管理的基本概念 在 Vue 应用中&#xff0c;状态指的是应用中的数据。例如&#xff1a; 用户登录状态购物车中的商品文章列表的分页信息 状态管理就是对这些数据的创建、读取、更新和删除进行有效管理。 …...

kotlin中枚举带参数和不带参数的区别

一 ✅ 代码对比总结 第一段&#xff08;带参数 工具方法&#xff09; enum class SeatPosition(val position: Int) {DRIVER_LEFT(0),DRIVER_RIGHT(1),SECOND_LEFT(2),SECOND_RIGHT(3);companion object {fun fromPosition(position: Int): SeatPosition? {return SeatPosi…...

【Python】Python好玩的第三方库之二维码生成,操作xlsx文件,以及音频控制器

前言 &#x1f31f;&#x1f31f;本期讲解关于python的三种第三方库的使用介绍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么…...

VTK 交互类介绍

基本概念 交互器(Interactor): 处理用户输入事件的基础类 交互样式(InteractorStyle): 定义具体的交互行为 Widgets: 可交互的UI组件,如滑块、按钮等 Picker: 用于选择场景中的对象 常用交互类 类名功能描述vtkRenderWindowInteractor渲染窗口交互器vtkInteractorStyle交互样式…...

在Window10 和 Ubuntu 24.04LTS 上 Ollama 在线或离线安装部署

Ollama 是一个开源的大型语言模型&#xff08;LLM&#xff09;服务框架&#xff0c;旨在通过轻量化、跨平台的设计&#xff0c;简化大模型在本地环境中的部署与应用。其基于 Go 语言开发&#xff0c;通过 Docker 容器化技术封装模型运行环境&#xff0c;提供类似命令行工具的交…...

语音合成之十一 提升TTS语音合成效果:低质量数据清洗、增强与数据扩增

低质量数据清洗、增强与数据扩增 1. 引言&#xff1a;TTS的基石——数据质量2. 基础&#xff1a;TTS数据准备工作流2.1 规划&#xff1a;定义蓝图2.2 执行&#xff1a;从原始数据到训练就绪格式2.3 最佳实践与可复现性 3. 攻克缺陷&#xff1a;低质量语音数据的清洗与增强3.2 手…...

RGB三原色

本文来源 &#xff1a; 腾讯元宝 ​​RGB三原色&#xff08;红绿蓝&#xff09;详解​​ RGB&#xff08;Red, Green, Blue&#xff09;是光学的三原色&#xff0c;通过不同比例的混合可以产生人眼可见的绝大多数颜色。它是现代显示技术&#xff08;如屏幕、投影仪&#xff09…...

BUUCTF 大流量分析(一) 1

BUUCTF:https://buuoj.cn/challenges 文章目录 题目描述&#xff1a;密文&#xff1a;解题思路&#xff1a;flag&#xff1a; 相关阅读 CTF Wiki BUUCTF:大流量分析&#xff08;一&#xff09; 题目描述&#xff1a; 某黑客对A公司发动了攻击&#xff0c;以下是一段时间内我们…...

虚幻引擎5-Unreal Engine笔记之显卡环境设置使开发流畅

虚幻引擎5-Unreal Engine笔记之显卡环境设置使开发流畅 code review! 文章目录 虚幻引擎5-Unreal Engine笔记之显卡环境设置使开发流畅1.电源管理2.显卡优先设置3.拯救者支持FnQ性能模式切换&#xff0c;建议开发前切至“野兽模式”或高性能模式。4.NVIDIA 驱动设置5.VS2022中…...

suna工具调用可视化界面实现原理分析(一)

这是一个基于React构建的工具调用侧边面板组件&#xff0c;主要用于展示和管理自动化工具调用流程。以下是代码功能解析及关键组件分析&#xff1a; 一、核心功能模块 多工具视图切换系统 • 动态视图加载&#xff1a;通过getToolView函数根据工具名称&#xff08;如execute-c…...

【将你的IDAPython插件迁移到IDA 9.x:核心API变更与升级指南】

文章目录 将你的 IDAPython 插件迁移到 IDA 9.x&#xff1a;核心 API 变更与升级指南为什么 API 会变化&#xff1f;关键不兼容性一&#xff1a;数据库信息访问 (inf_structure)关键不兼容性二&#xff1a;窗口/视图类型判断 (BWN_* 和 form_type)其他可能的 API 变更迁移策略建…...

《Python星球日记》第31天:Django 框架入门

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 专栏&#xff1a;《Python星球日记》&#xff0c;限时特价订阅中ing 目录 一、Django…...

读《人生道路的选择》有感

读完戴维坎贝尔的《人生道路的选择》&#xff0c;深有感触&#xff0c;虽然只有短短的108也&#xff0c;但作者强调了在复杂的生活环境之中“选择”的重要性。这也是我想要探讨的话题&#xff0c;选择到底会对我们人生产生怎样的影响。 在我们人生当中&#xff0c;确实有许多的…...

opencv+opencv_contrib+cuda和VS2022编译

本文介绍使用OpenCV和OpenCV_Contrib源码及Cuda进行编译的过程&#xff0c;编译过程中会用到OpenCV、OpenCV_Contrib、Toolkit、Cmake、VS2022等工具&#xff0c;最终编译OpenCV的Cuda版本。 一、OpenCV下载地址 OpenCV官网下载地址:https://opencv.org/releases/#&#xff0…...

STC单片机与淘晶驰串口屏通讯例程之01【新建HDMI工程】

大家好,我是『芯知识学堂』的SingleYork,今天笔者给大家一起学习这款“SYK-0806-A2S1”控制板与淘晶驰串口屏通讯的例程,本例使用的是淘晶驰的4.3寸电阻触摸屏TJC4827T143_011R_I_P20,分辨率为480272,详细参数大家可以查看这个屏的手册。 先来看下本例程整体的效果: 那么…...

PE文件结构(导出表)

导出表 什么是导出表&#xff1f; 导出表是PE文件中记录动态链接库&#xff08;DLL&#xff09;对外提供的函数或数据的列表&#xff0c;包含函数名称、序号和内存地址等信息&#xff0c;供其他程序调用 我们写一个dll来查看一下导出函数 int exportFunc1(int a, int b) {ret…...

网络安全自动化:精准把握自动化边界,筑牢企业安全防

在当今数字化时代&#xff0c;网络攻击的威胁日益严峻&#xff0c;企业网络安全的重要性不言而喻。随着海量资产与复杂架构的出现&#xff0c;网络安全自动化成为了众多企业关注的焦点。网络安全维护看似简单的修补系统、删除旧账户、更新软件&#xff0c;在大型企业中却极易变…...

实战设计模式之中介者模式

概述 中介者模式是一种强大且灵活的设计模式&#xff0c;适用于需要优化对象间通信的场景。中介者模式通过引入一个中介对象&#xff0c;来封装一系列对象之间的交互。在没有中介者的情况下&#xff0c;这些对象之间可能会直接相互引用&#xff0c;导致系统中的类紧密耦合&…...

价格识别策略思路

该策略是一种基于价格形态和市场条件的交易算法&#xff0c;旨在通过识别特定的价格模式来生成买入和卖出信号。 价格形态识别 策略的核心在于识别价格的高点和低点形态。通过比较当前周期及其前几个周期的最高价和最低价&#xff0c; 策略定义了一系列条件来判断价格是否形成了…...

Kotlin带接收者的Lambda介绍和应用(封装DialogFragment)

先来看一个具体应用&#xff1a;假设我们有一个App&#xff0c;App中有一个退出应用的按钮&#xff0c;点击该按钮后并不是立即退出&#xff0c;而是先弹出一个对话框&#xff0c;询问用户是否确定要退出&#xff0c;用户点了确定再退出&#xff0c;点取消则不退出&#xff0c;…...

【NLP】32. Transformers (HuggingFace Pipelines 实战)

&#x1f916; Transformers &#xff08;HuggingFace Pipelines 实战&#xff09; 本教程基于 Hugging Face 的 transformers 库&#xff0c;展示如何使用预训练模型完成以下任务&#xff1a; 情感分析&#xff08;Sentiment Analysis&#xff09;文本生成&#xff08;Text …...

[ 设计模式 ] | 单例模式

单例模式是什么&#xff1f;哪两种模式&#xff1f; 单例模式就是一个类型的对象&#xff0c;只有一个&#xff0c;比如说搜索引擎中的索引部分&#xff0c;360安全卫士的桌面悬浮球。 饿汉模式和懒汉模式&#xff1a;饿汉模式是线程安全的&#xff0c;懒汉模式不是线程安全的…...

用网页显示工控仪表

一.起因 现在工控也越来越多的使用web页面来显示电压,电流,温度,转速等物理量.本例使用js控制网页显示速度仪表. 二.代码 <html> <head><script type"text/javascript">var ctx;var px0;var movePoint{x0:0,x1:0};function init(){drawFace();m…...

Spring项目改造Solon版,使用体验,对比

概述 对于Solon有些人可能并不了解&#xff0c;在官方概述中&#xff0c;称其是新一代Java企业级应用开发框架&#xff0c;从零开始构建&#xff0c;有自主的标准规范与开放生态。近16万行代码。 并有更快、更小、更简单的特点 什么样的Java项目用Solon好&#xff1f; 按正常…...

2.CFD 计算过程概述:Fluent在散热计算中的优势

1.主流散热软件 2.电子产品热设计的基本要求 3.失效率与温度之间的关系 4.电子产品热设计的基本要求 5.电子产品必须要做散热设计 6.主动散热与被动散热 7.高效山热方案 8.热交换模型 9.Fluent中传热模型...

【Java ee初阶】多线程(6)

一、阻塞队列 队列的原则&#xff1a;“先进先出”&#xff0c;队列分为普通队列&#xff0c;优先级队列等等。在数据结构中&#xff0c;堆是特殊的完全二叉树&#xff0c;一定不要把堆和二叉搜索树混淆。 阻塞队列是一种特殊的队列&#xff0c;也遵循“先进先出”的原则。 …...