Jack Huang's Blog


  • 首页

  • 标签

  • 归档

  • 搜索

CPlusPlus之Lambda表达式

发表于 2021-11-20

参考链接

  1. C++ 11 Lambda表达式,by 滴水瓦.

CPlusPlus函数设计技巧

发表于 2021-11-15 | 更新于 2021-11-17

在C++中,参数传递的方式是“实虚结合”。

  • 按值传递(pass by value)
  • 地址传递(pass by pointer)
  • 引用传递(pass by reference)

参考链接

  1. C语言函数设计的一般原则和技巧,by C语言中文网.
  2. 设计C++函数传参时如何决定使用指针还是引用?,by zhihu.
  3. C++中函数调用时的三种参数传递方式详解,by CC丶Z.
  4. C++ 函数可以直接返回一个对象吗?,by nettee.
  5. 数组作为函数参数,by LiHongxi.
  6. C++类对象作为函数参数传递详解,by c语言中文网.
  7. C++引用10分钟入门教程,by c语言中文网.
  8. C++中类成员对象与指针的区别,by PengStrongLee.
  9. C++中using的三种用法,by 算法集市.
  10. 10、【C++】前向声明/嵌套类/局部类(内部类),by 阿慕路泽.
  11. C++11 noexcept 关键字用法学习,by CNBLOG.

Simulink的强化学习代理开始无输出结果的解决方法

发表于 2021-11-14

Simulink进行强化学习代理训练时,出现如下错误:

1
2
3
Derivative of state '2' in block 'physicalModel/Nonlinear Second-Order Actuator/Integrator, Second-Order
Limited' at time 0.0 is not finite. The simulation will be stopped. There may be a singularity in the solution. If not, try reducing the step size
(either by reducing the fixed step size or by tightening the error tolerances)

经过分析,导致该错误的原因是产生强化学习代理初始输入信号的Memory模块的初始值设为inf导致的。解决方法是修改Memory模块的初始值。

参考链接

  1. Simulink扩展卡尔曼滤波输出无结果的解决,by 渣渣丰.

软件自动化测试工具简介

发表于 2021-11-14

在软件测试中,自动化测试指的是使用独立于待测软件的其他软件来自动执行测试、比较实际结果与预期并生成测试报告这一过程。在测试流程已经确定后,测试自动化可以自动执行的一些重复但必要测试工作。也可以完成手动测试几乎不可能完成的测试。对于持续交付和持续集成的开发方式而言,测试自动化是至关重要的。

GUI自动化测试工具

WinAppDriver

WinAppDriver(Windows Application Driver)是一个类似Selenium的UI自动化测试服务。
系统要求: Windows10或Windows Server 2016。支持应用程序: UWP, WPF, WinForms, Win32。

Microsoft UI Automation

UI Automation是Microsoft .NET 3.0框架下提供的一种用于自动化测试的技术,是在MSAA基础上建立的,MSAA就是Microsoft Active Accessibility。UI Automation在某些方面超过了MSAA,UI自动化提供了Windows Vista中,微软Windows XP的全部功能,和Windows Server 2003。

Web自动化测试工具

Selenium

Selenium 是为web浏览器的自动化提供了各种工具和依赖包。它支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏览器,如果你在这些浏览器里面安装一个 Selenium 的插件,那么便可以方便地实现 Web 界面的测试。

参考链接

  1. spy++简介,by jackhuang.
  2. 自动化测试,by wikipedia.
  3. 用 Selenium + OpenCV 来玩 HTML5 小游戏,by 郑恒.
  4. Selenium,by Selenium homepage.
  5. 【龙测教程】教你做windows自动化测试,by pur-maple.
  6. 使用UI Automation实现自动化测试–1,by 开着拖拉机.
  7. Windows GUI自动化测试技术的比较和展望,by vagabond1.
  8. 开源自己用python封装的一个Windows GUI(UI Automation)自动化工具,支持MFC,Windows Forms,WPF,Metro,Qt,by YinKaisheng.
  9. 聊聊 PC 端自动化最佳方案:Pywinauto,by Linux爱好者.
  10. 聊聊 PC 端自动化最佳方案 - WinAppDriver,by AirPythonl.

CPlusPlus智能指针简介

发表于 2021-11-13 | 更新于 2024-04-21

当类中有指针成员时,一般有两种方式来管理指针成员:一是采用值型的方式管理,每个类对象都保留一份指针指向的对象的拷贝;另一种更优雅的方式是使用智能指针,从而实现指针指向的对象的共享。

智能指针(smart pointer)的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象的指针指向同一对象。

auto_ptr

auto_ptr的实现原理其实是在构造的时候获取资源,在析构的时候释放资源,并进行相关指针操作的重载,使用起来就像普通的指针。

smart_ptr

智能指针(smart_ptr)是Boost各组件中,应用最为广泛的一个。

Boost从很早就提供了如下的智能指针,并且功能一直保持稳定:

  • scoped_ptr:不可拷贝与赋值,承载new,只能在 scoped_ptr 声明的作用域内使用。
  • scoped_array:不可拷贝与赋值,承载new []。
  • shared_ptr:可拷贝,承载new。boost 库中重要组成,重点学习。
  • shared_array:可拷贝,承载new []。
  • weak_ptr:弱引用。
  • intrusive_ptr:需要自实现计数功能的,引用计数智能指针。

smart_ptr的一种实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
template <typename T>  
class smart_ptr
{
public:
smart_ptr(T *p = 0): pointee(p), count(new size_t(1)) { } //初始的计数值为1
smart_ptr(const smart_ptr &rhs): pointee(rhs.pointee), count(rhs.count) { ++*count; } //拷贝构造函数,计数加1
~smart_ptr() { decr_count(); } //析构,计数减1,减到0时进行垃圾回收,即释放空间
smart_ptr& operator= (const smart_ptr& rhs) //重载赋值操作符
{
//给自身赋值也对,因为如果自身赋值,计数器先减1,再加1,并未发生改变
++*count;
decr_count();
pointee = rhs.pointee;
count = rhs.count;
return *this;
}
//重载箭头操作符和解引用操作符,未提供指针的检查
T *operator->() { return pointee; }
const T *operator->() const { return pointee; }
T &operator*() { return *pointee; }
const T &operator*() const { return *pointee; }
size_t get_refcount() { return *count; } //获得引用计数器值
private:
T *pointee; //实际指针,被代理
size_t *count; //引用计数器
void decr_count() //计数器减1
{
if(--*count == 0)
{
delete pointee;
delete count;
}
}
};

c++ 11智能指针

c++ 11 提供了3种智能指针:std::shared_ptr、std::unique_ptr、std::weak_ptr,使用时引用头文件 。

  • shared_ptr允许多个指针指向同一个对象
  • unique_ptr则“独占”所指向的对象
  • weak_ptr,它是一种弱引用,指向shared_ptr所管理的对象

参考链接

  1. 智能指针,by 百度百科。
  2. C++各类设计模式及实现详解,by linux.
  3. C++智能指针auto_ptr详解,by CHENG Jian.
  4. boost 学习笔记 4:智能指针 smart_ptr,by einverne.
  5. 研究C++类的成员变量构造析构顺序,by paokuflying.
  6. C++智能指针作为成员变量,by caesar1228.
  7. 为什么建议你用nullptr而不是NULL,by 守望.
  8. C++11动态内存与智能指针,by herryone123.

spy++简介

发表于 2021-11-12 | 更新于 2021-11-13

开发某些自动化工具,第一步就是要获取目标窗口的句柄,然后通过该窗口句柄向该窗口发送消息,以实现自动输入等功能。而获取窗口句柄必然离不开Spy++工具。

GUI自动测试

HTML5 Canvas自动测试

参考链接

  1. Windows上spy++的安装和使用,by wyplj_sir.
  2. [WinAPI] 获取窗口句柄的几种方法,by beautifulzzzz.
  3. c# 获取当前活动窗口句柄,获取窗口大小及位置,by jack_孟.
  4. 通过获取窗口句柄模拟键鼠点击的一些方法,by unbalance_.
  5. Why do some windows not receive Windows messages,by stackoverflow.
  6. Spy++ alternative that can send messages,by stackoverflow.
  7. 哪些事情是 AutoIt 可以而 AutoHotkey 不行的?,by zhihu.
  8. AutoIt 软件自动化操作,by 邹龙彬.
  9. 游戏测试 游戏自动化测试三三二二,by IAmTester.
  10. 序、自动化测试概述,by Airtest Project Docs.
  11. Selenium详解,by 闲欢.
  12. canvas进阶——如何实现canvas的事件系统,by 我的蓝猫被削了.
  13. CANVAS 实现事件系统,by 阿飞.
  14. Canvas的高级绘制技巧和事件系统,by Canvas in deeps.
  15. 使用Selenium和openCV对HTML5 canvas游戏进行自动化功能测试(一),by silmerusse.
  16. 用 Selenium + OpenCV 来玩 HTML5 小游戏,by 郑恒.

CPlusPlus之从二进制文件中读取浮点数

发表于 2021-11-10

参考链接

  1. reading floating numbers from bin file continuosly and outputting in console window,by stackoverflow.
  2. C++ memcpy()函数用法,by iamzhangzhuping.

CPlusPlus之引用符号&的用法

发表于 2021-11-09 | 更新于 2024-04-26

符号&在C语言中代表取址符,在C++中则代表引用,是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。

引用简介

引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。

引用的声明方法:类型标识符 &引用名=目标变量名;

1
int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名

引用作为参数

引用的一个重要作用就是作为函数的参数。以前的C语言中函数参数传递是值传递,如果有大块数据作为参数传递的时候,采用的方案往往是指针,因为这样可以避免将整块数据全部压栈,可以提高程序的效率。但是现在(C++中)又增加了一种同样有效率的选择(在某些特殊情况下又是必须的选择),就是引用。

1
2
void swap(int &p1, int &p2) //此处函数的形参p1, p2都是引用
{ int p; p=p1; p1=p2; p2=p; }

引用作为返回值

要以引用返回函数值,则函数定义时要按以下格式:

类型标识符 &函数名(形参列表及类型说明)
{函数体}

1
2
3
4
5
float &fn2(float r) //定义函数fn2,它以引用方式返回函数值
{
 temp=(float)(r*r*3.14);
 return temp;
}

引用作为返回值,必须遵守以下规则:

  • 不能返回局部变量的引用。
  • 不能返回函数内部new分配的内存的引用。
  • 可以返回类成员的引用,但最好是const。

参考链接

  1. c++&的用法,by Knigh_art.
  2. 我所理解的C++类设计中private成员变量和返回const引用类型,by Huming.
  3. C++返回引用的需求,by 唐淼.

CPlusPlus之Boost的JSON库操作

发表于 2021-11-08 | 更新于 2021-11-09

12月11日,Boost社区发布了1.75版本,带来了JSON,LEAF,PFR三个新库。其中JSON自然是json格式的解析库,来自Vinnie Falco和Krystian Stasiowski。

JSON库简介

其实在之前,Boost就已经有能够解析JSON的库了,名字叫做Boost.PropertyTree。Boost.PropertyTree不仅仅能够解析JSON,还能解析XML,INI和INFO格式的文件。但是由于成文较早及需要兼容其他的数据格式,相比较于其他的C++解析库,其显得比较笨重,使用的时候有很多的不方便。且存在以下问题:

  • 不支持 JSON 中的空数组
  • 所有类型信息都丢失了(所有内容都必须是 JSON 字符串)

Boost.JSON相对于Boost.PropertyTree来所,其只能支持JSON格式的解析,但是其使用方法更为简便,直接。华丽胡哨的东西也更多了。

参考链接

  1. Boost.JSON Boost的JSON解析库(1.75首发),by ink19.
  2. c++ - 如何使用 json 解析器的 boost property_tree 创建空数组节点,by coder.
  3. 【C++/Boost】 新增的JSON Library简介,by codeleading.

Ubuntu-18-04-Server安装图形界面和远程桌面连接

发表于 2021-11-06

远程云主机部署的Ubuntu 18.04 Server没有图形用户界面,而且自带的远程访问客户端不给力,因此考虑给Ubuntu 18.04 Server安装图形用户界面,同时打算使用Windows的

安装图形界面

Linux服务器未安装桌面环境。我们的第一步是安装X11和一个轻量级的桌面环境,该环境将充当Xrdp的后端。

Ubuntu存储库中有几种可用的桌面环境(DE)。我们将安装 Xfce 。这是一个快速,稳定且轻巧的桌面环境,非常适合在远程服务器上使用。

1
sudo apt update sudo apt install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils

远程桌面连接

Xrdp是Microsoft远程桌面协议(RDP)的开源实现,允许您以图形方式控制远程系统。使用RDP,您可以登录到远程计算机并创建真实的桌面会话,就像登录到本地计算机一样。如果您想要开放源代码的远程桌面访问解决方案,请使用 VNC 。

安装Xrdp

1
2
sudo apt install xrdp
sudo systemctl status xrdp

配置Xrdp

1
2
3
4
5
sudo nano /etc/xrdp/xrdp.ini
# 在文件末尾添加以下行:
# exec startxfce4
# 保存文件并重新启动Xrdp服务
sudo systemctl restart xrdp

配置防火墙

1
2
sudo ufw allow from 192.168.1.0/24 to any port 3389
sudo ufw allow 3389

连接到Xrdp服务器

如果您是Windows用户,则可以使用默认的RDP客户端。在Windows搜索栏中键入“ remote”,然后单击“ Remote Desktop Connection”。这将打开RDP客户端。在计算机字段中输入远程服务器IP地址,然后单击“连接”。

参考链接

  1. Ubuntu server 18.04 安装图形化界面环境,by alits.
  2. 如何在Ubuntu 18.04上安装Xrdp Server(远程桌面),by myfreax.
上一页1…202122…53下一页

Jack Huang

523 日志
67 标签
© 2025 Jack Huang
由 Hexo 强力驱动
|
主题 — NexT.Muse