- 博客(316)
- 收藏
- 关注

原创 std::bind
std::bind是函数模板(是一个函数);使用std::bind可以将可调用对象和参数一起绑定,绑定后的结果使用std::function进行保存,并延迟调用到任何我们需要的时候。std::bind返回一个基于f的函数对象,其参数被绑定到args上。f的参数要么被绑定到值,要么被绑定到placeholders(占位符,如_1, _2, ..., _n)。即;可将std::bind函数看作一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来“适应”原对象的参数列表。std:
2022-02-24 11:22:26
43418

原创 qt 编译运行步骤
先qmake。 由.pro文件生成Makefile文件,makefile文件保存了编译器和连接器的参数选项,还表述了所有源文件之间的关系(源代码文件需要的特定的包含文件,可执行文件要求包含的目标文件模 块及库等). 再构建。 构建[mingw32-make、moc、uic等]是增量编译,只编译有变动部分,同时生成.exe,还有许多.o目标文件; 最后运行。如果有改动则根据已有的Makefile...
2019-05-16 17:07:28
13124
1

原创 虚拟机 Ubuntu安装gcc和g++
默认安装Ubuntu是没有带gcc和g++的,需要自己安装。首先需要知道root的密码,方法为在普通用户的客户端下:sudo passwd root ,重新设置root密码,因为Ubuntu刚安装时不知道root的密码的,所以需重置。 使用su 切换到root登录使用终端。 Ubuntu 是使用apt 该命令下载安装程序的,该过程需要联网。用apt install gcc 和apt in...
2019-05-12 10:36:03
11415
原创 c# http
WebClient一种更高级别的抽象,是HttpWebRequest为了简化最常见任务而创建的,使用过程中你会发现他缺少基本的header,timeoust的设置,不过这些可以通过继承httpwebrequest来实现。相对来说,WebClient比WebRequest更加简单,它相当于封装了request和response方法,不过需要说明的是,Webclient和WebRequest继承的是不同类,两者在继承上没有任何关系。submit-name 是这个Key-Value数据中的Key。
2025-02-10 16:24:39
693
原创 http协议
WebClient一种更高级别的抽象,是HttpWebRequest为了简化最常见任务而创建的,使用过程中你会发现他缺少基本的header,timeoust的设置,不过这些可以通过继承httpwebrequest来实现。相对来说,WebClient比WebRequest更加简单,它相当于封装了request和response方法,不过需要说明的是,Webclient和WebRequest继承的是不同类,两者在继承上没有任何关系。用文本的传输和MP3等大型文件的时候,使用这种编码就显得 效率低下。
2025-02-06 10:47:51
890
原创 mqtt学习
客户端负责保证 控制报文 发送的时间间隔不超过设定的保持连接的值,如果没有任何其他的控制报文可以发送,则达到时间间隔尽头,发送PINGREQ控制报文(*就是心跳请求控制报文,当然也可以不在时间间隔尽头发送,只是几乎所有的项目代码都设定为时间间隔尽头而已)保持连接是一个以秒为单位的时间间隔,16位(最大设定为16位全1,即18个小时),表示在客户端传输完成一个控制报文的时刻到发送下一个报文的时刻,两者之间允许空闲的最大时间间隔。为此,带有唯一消息 ID 的消息会存储两次,首先来自发送者,然后是接收者。
2024-10-14 14:35:38
1137
原创 QTcpSocket 及QTcpServer 多线程使用
注意:如果你想处理在另一个线程一个新的QTcpSocket对象传入连接,您必须将socketDescriptor传递给其他线程,并创建了QTcpSocket对象存在并使用其setSocketDescriptor()方法。该函数会创建一个QTcpSocket,并设置套接字描述符为socketDescriptor,然后存储QTcpSocket在挂起连接的内部清单。接收函数:readAll、发送函数:write、关闭连接函数:close 都需要在子线程实现。重新实现这个函数来改变服务器的行为,当一个连接可用。
2024-09-03 15:21:06
1652
原创 Qt WebSocket
3)保持连接状态:与 HTTP 不同的是,WebSocket 需要先创建连接,这就使得其成为一种有状态的协议,之后通信时可以省略部分状态信息;在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行。1)较少的控制开销:在连接创建后,服务器和客户端之间交换数据时,用于协议控制的数据包头部相对较小;5)可以支持扩展:WebSocket 定义了扩展,用户可以扩展协议、实现部分自定义的子协议。如: ws://example.com:80/some/path。
2024-08-26 17:01:02
1430
1
原创 学习minio
MinIO 在很早的时候就采用了 S3 兼容协议,并且MinIO 是第一个支持 S3 Select 的产品. MinIO对其兼容性的全面性感到自豪, 并且得到了 750多个组织的认同, 包括Microsoft Azure使用MinIO的S3网关 - 这一指标超过其他同类产品的总和。这就意味着 MinIO的客户能够自动的、无限制、自由免费使用和集成MinIO、自由的创新和创造、 自由的去修改、自由的再次发行新的版本和软件. 确实, MinIO 强有力的支持和驱动了很多世界500强的企业。
2024-08-20 19:44:19
901
原创 linux服务 学习
etc/systemd/system/vsftpd.service.d/custom.conf:在 /etc/systemd/system 下面创建与配置文件相同文件名的目录,但是要加上 .d 的扩展名。/etc/systemd/system/目录下存放的是需要开机执行的服务,该目录下有大量的链接文件,链接到/usr/lib/systemd/system/目录下,该目录下的文件才是systemd实际启动的服务脚本文件。Upstart的配置文件存放在/etc/init/目录。
2024-08-20 19:30:30
1154
原创 编译aws并访问minio
这里我使用的是cmake ../aws-sdk-cpp -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/root/software/aws/aws/install/ -DBUILD_ONLY="s3" -DENABLE_TESTING=OFF。/// 判断存储桶及相关连接是否有效。参看https://docs.aws.amazon.com/zh_cn/sdk-for-cpp/v1/developer-guide/setup-windows.html。
2024-08-14 16:14:40
1167
原创 cmake-gui
ZERO_CHECK是首先执行的构建目标,会检查生成出的VS项目相比CMakeLists.txt是否过期,如果过期会首先重新生成VS项目。首先,先将test.cpp编译成一个静态库,同时生成一个a.exe,再将静态库链接到a.exe内;项目源码写好之后,不同的平台,不同的编译器会根据CMakeLists.txt里的指令生成各自的项目文件,在Windows平台上,可以使用cmake-gui根据CMakeLists.txt里的指令,生成你电脑上安装好的Visual Studio项目。//test.h的内容。
2024-08-14 16:09:16
343
原创 c++编译、链接、构建
这样从cmake里就能看到源码编译的过程,也是上面我说的第二条,也能更好地理解编译的过程。project命令用于指定cmake工程的名称,实际上,它还可以指定cmake工程的版本号(VERSION关键字)、简短的描述(DESCRIPTION关键字)、主页URL(HOMEPAGE_URL关键字)和编译工程使用的语言(LANGUAGES关键字)在Makefile中我们要定义一系列的变量,变量一般都是字符串,这个有点你C语言中的宏,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上。
2024-08-14 16:07:14
612
原创 windows系统下编译和使用grpc
把helloworld.proto、helloworld.pb.h、helloworld.pb.cc、helloworld.grpc.pb.h、helloworld.grpc.pb.cc添加到server项目中,同时greeter_server.cc的代码拷贝到main.cpp文件,并稍微改造一下。把该目录下的所依赖的库文件都通过https://github.com/grpc/grpc/tree/master/third_party下载并解压放到grpc/third_party。
2024-07-31 15:04:51
1397
原创 linux编译grpc
一样要使用到protoc软件,则需要在环境变量PATH增加protoc软件所在的目录,同时由于protoc软件需要用到grpc的动态库,所以需要设置环境变量LD_LIBRARY_PATH,增加grpc动态库目录。自动加入所依赖的其他库的设置。protoc:解析proto文件并根据给定的选项生成输出,其命令格式是protoc [OPTION] PROTO_FILES,最后一项是待编译的proto文件的位置。--grpc_out:指定.grpc.pb.cc和.grpc.pb.h文件的输出目录。
2024-07-31 14:51:35
1003
原创 使用vcpkg
它会将vcpkg的工具链路径添加到构建系统的配置中,使得构建系统能够在库搜索路径中找到vcpkg安装的库。自动设置链接和包含路径:在执行vcpkg integrate install命令后,vcpkg会自动将库的链接路径和头文件包含路径添加到项目的构建系统配置中。透明集成:一旦使用vcpkg integrate install命令将vcpkg与项目集成,开发人员就可以无需关心库的链接和包含路径的配置细节。该命令会将vcpkg工具链与项目的构建系统进行集成,以方便在项目中使用vcpkg安装的库。
2024-07-25 19:18:55
804
原创 qt中实现多语言功能
其中,location没有也可以,只是QT语言家打开.ts文件时定位不到字符串位置而已,主要还是source 元素和translation元素,source元素相当于字符串的id,翻译家通过source在lang_zh_CN.ts找中文文本,在lang_en.ts找英文文本。然后在Qt Creator中,使用:工具->外部->Qt预言家->部署翻译(lrelease),就会生成需要的qm文件或者在Linguist中点击文件->发布。生成qm文件之后,在main.cpp文件中添加下面的代码,加载qm文件。
2024-05-29 15:52:08
1400
原创 qt QTreeWidget 学习
/ 设置列标题为 "Name" 和 "Value"void itemChanged(QTreeWidgetItem * item, int column) //条目列的数据发生变化,比如文本或图标修改了。// 创建一个子节点。void itemDoubleClicked(QTreeWidgetItem * item, int column) //条目列被双击。void itemActivated(QTreeWidgetItem * item, int column) //条目列被激活。
2024-04-25 14:46:32
1119
原创 qt 信号槽
使用某对象时,用指针指向另一个对象的函数,这个函数就称为回调函数。3、Qt::QueuedConnection:信号发出后,信号会暂时被放到一个消息队列中,需等到接收对象所属线程的事件循环取得控制权时才取得该信号,然后执行和信号关联的槽函数,这种方式既可以在同一线程内传递消息也可以。观察者模式,激发信号的Qt对象无须知道是哪个对象的哪个槽函数需要接收它发出的信号,它只需要做的是在适当的时间发送适当的信号就可以了,而不需要知道也不关心它的信号有没有被接收到,更不需要知道哪个对象的哪个槽接收了信号。
2024-04-19 14:20:55
931
原创 qt 元对象系统及属性系统
type:连接类型;invokeMethod为信号槽而生,你可以指定连接类型,如果被调用的对象和发起调用的线程是同一线程,那么可以使用Qt::DirectConnection、Qt::AutoConnection、Qt::QueuedConnection,如果被调用对象在另一个线程,那么建议使用Qt::QueuedConnection;(4)函数qobject_cast(): 对于Object及其子类对象,可以使用函数qobject_cast()进行动态类型转换,此处可以理解为c++中的强制类型转换。
2024-04-17 15:10:59
1133
原创 Qt使用插件QPluginLoader 机制开发
在这种情况下,插件可以提供任意功能,不限于数据库驱动程序、图像格式、文本编解码器、样式以及扩展Qt功能的其他类型的插件。这个宏第一次参数定义了一个uuid,保证唯一即可,第二个json是必须要有的,当无法找到指定的文件时,moc 会出现错误,即使是空的文件也行。如果 QPluginLoader 的其他实例正在使用相同的插件,则调用将失败,并且只有在每个实例都调用了 unload() 时才会发生卸载。一种高级API,用于为Qt本身编写插件:自定义数据库驱动程序,图像格式,文本编解码器,自定义样式等。
2024-04-08 11:16:52
2126
1
原创 linux sh脚本编写
使用source script.sh方式,在当前上下文中执行脚本,不会生成新的进程,执行完毕,回到当前shell。if 条件语句的双分支结构由 if、then、else、fi 关键词组成,它进行一次条件匹配判断, 如果与条件匹配,则去执行相应的预设命令;if 条件语句的多分支结构由if、then、else、elif、fi 关键词组成,它进行多次条件匹配判断,这多次判断中的任何一项在匹配成功后都会执行相应的预设命令。当前shell是父进程,生成一个子shell进程,在子shell中执行脚本。
2024-03-22 11:36:45
2024
原创 qt QProcess学习
terminate(),区别于 kill() 这种暴力的退出不同,它在退出进程的时候是有机会提示用户输入任何为保存的文件等。进程的输出通道与QProcess的读取通道相对应,⽽进程的输⼊通道与QProcess的写⼊通道相对应。这是因为我们使⽤QProcess读取的内容是进程的输出,⽽我们编写的内容则成为进程的输⼊。调⽤start()函数或open()函数启动进程。以分离的方式启动外部程序,外部程序与主程序互不干扰,外部进程的父进程是。的方式启动外部程序,外部进程与主程序互不干扰,但外部进程的父进程就是。
2024-03-21 08:45:09
1590
原创 qt Qt Remote Object(QtRO)实现进程间通信
功能提供节点(可以理解为服务器)需要使用QRemoteObjectHost将一个提供实际功能的QObject派生类注册进QtRO网络中,然后其他使用该功能的程序则通过各自的QRemoteObjectNode连接到该Host上,然后acquire一个该功能对象的Replica。host 不能直接访问当前连接的 node,服务端是所有已连接的 node 共享的,如果 host-source 发信号,那么所有连接的 node 都会收到这个信号。Signal方法是通过使用rep文件中的SIGNAL关键字创建的。
2024-03-20 10:21:47
1715
原创 c# 多线程创建及线程同步
BeginInvoke倒数第二个参数(MethodCompleted)是回调方法委托类型,他是回调方法的委托,此委托没有返回值,有一个IAsyncResult类型的参数,当method方法执行完后,系统会自动调用MethodCompleted方法。ManualResetEvent:在调用 `Set` 方法后,所有等待线程都会被唤醒并继续执行,直到显式调用 `Reset` 方法将 ManualResetEvent 设置回无信号状态为止。即每次调用 `Set` 方法会唤醒所有等待线程。
2024-03-08 09:15:23
1129
原创 c# 任务(Task)以及异步 await(等待) 、Async(异步)
Task出现之前,微软的多线程处理方式有:Thread→ThreadPool→委托的异步调用,虽然也可以基本业务需要的多线程场景,但它们在多个线程的等待处理方面、资源占用方面、线程延续和阻塞方面、线程的取消方面等都显得比较笨拙,ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便。Task.WhenAny(tasks.ToArray()).ContinueWith(x => Console.WriteLine("某个Task执行完毕"));
2024-02-29 10:54:02
4855
原创 c#委托、lambda、事件
2.注册有多个方法的委托想要开启新线程去执行委托,可以通过action.GetInvocationList()获取到所有的委托,然后循环,每个方法执行的时候可以BeginInvoke。(还是在同一线程执行)会开启一个新的线程去执行委托,注册有多个方法的委托,不能使用BeginInvoke。3.使用多播委托的时候可能会遇到一个问题,就是委托链的第一个方法报错了,导致后面的注册的方法都无法调用。匿名方法的意义在于:快速方便的实例化委托,不用定义具体的方法来关联委托,就是临时定义个方法(处理逻辑)与委托相关联。
2024-02-28 14:04:56
1427
原创 c# using 用法
using+别名=包括详细命名空间信息的具体类型,这种做法有个好处就是当同一个cs引用了两个不同的命名空间,但两个命名空间都包括了一个相同名字的类型的时候。当需要用到这个类型的时候,就每个地方都要用详细命名空间的办法来区分这些相同名字的类型。注意:并不是说两个名字重复,给其中一个用了别名,另外一个就不需要用别名了,如果两个都要使用,则两个都需要用using来定义别名的。,当然并不是所有的类都适用,只有实现了IDisposable接口的类才可以使用。的,在一定的范围内有效,出了这个范围时,自动。
2024-02-27 08:59:09
589
原创 c# 异常处理
代码中 catch 块的计算顺序为从上到下,但针对引发的每个异常,仅执行一个 catch 块。如果没有 catch 块指定匹配的异常类,则将选择不具有类型的 catch 块(如果语句中存在)。默认所有系统异常派生于 System.SystemException,所有的应用程序异常派生于 System.ApplicationException。应用程序异常一般可以预测,比如文件对象找不到啦,值不在范围内啦,数据类型不一致等等,设计,处理逻辑可以判断的。:用于检查发生的异常,并帮助发送任何可能的异常。
2024-02-26 13:42:48
1218
原创 c# 非托管资源的释放(析构函数、Dispose)
调用了Dispose方法。每一个类库固然能够提供各自释放资源的方法,好比close()、release()、clear()等等。使用using 语句语句,在一定的范围内有效,除了这个范围时,自动调用IDisposable的。所以在自定义的类,并且继承IDisposable接口的时候,重写虚函数Dispose,并且还为实现了IDispose接口的类提供了using释放资源的语法糖。调用的是微软类库或者第三方类库,通常类库会提供释放的方法,即约定为。并且新建带参数的Dispose函数,在该函数实现释放资源。
2024-02-26 09:17:50
997
原创 c# 类、接口、抽象类
2、函数调用out参数量,必须把它当作尚未赋值(即可以把已赋值的变量当作out参数,但存储在该变量中的值在方法执行时会丢失);口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法,抽象类可以定义属性、字段、包含有实现的方法。方法1:声明数组类型的参数,添加 params 关键字,就可以使用任意数量的 int 参数调用该方法。3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员)表示向方法传递一个值类型,避免复制值的开销,同时又不想在方法内改变值。
2024-02-23 11:27:59
965
原创 c#常用的数据结构及LINQ语法
数据结构 类型及备注 插入和删除 查找Array 顺序存储的线性表、定长 不支持(这里的插入与删除指会更改表长的行为) O(N)LinkedList 链式存储的线性表、不定长 O(1) O(N)List 顺序存储的线性表、不定长、动态扩容 O(N),结尾则是O(1) O(N)Stack 栈、不定长、动态扩容 O(1) 只能访问栈顶Queue 队列、不定长、动态扩容 O(1) 只能访问队列头部。
2024-02-22 09:07:04
1846
原创 Pcap通信
bytes是u_char类型的指针,指向数据包的实际内容。5. 兼容性:winpcap兼容libpcap,可以使用libpcap的应用程序在Windows平台下运行,但是libpcap不兼容winpcap,不能使用winpcap的应用程序在Linux平台下运行。除去4个字节的FCS,因此,抓包时就是60字节。来发送数据包,注意,第三个参数如果非零,那么发送将是同步的,这将站用很大的CPU资源,因为发生在内核驱动的同步发送是通过"brute force"loops的,但是一般情况下能够精确到微秒。
2024-01-26 10:58:41
1261
原创 NSIS 安装windows 安装包(包括QT和MFC)
Function<函数名>FunctionEn用户自定义函数仅当是Call指令调用时才被执行。
2024-01-09 09:27:10
1289
原创 Qt在linux系统上使用技巧
QT在生成动态库时,会默认生成(.so)、(.so.1)、(.so.1.0)、(.so.1.0.0)四个文件。其中,(.so.1.0.0)为实际的动态库文件,(.so)、(.so.1)、(.so.1.0)均为软链接,都是指向(.so.1.0.0)的链接文件,为了版本控制。直接通过绝对路径和相对路径指定库的完整path(需后缀,.lib,.a, .so都适用),相对路径用$$pwd前缀,路径不允许空格。可以用-L指定目录,-l指定库的名称(无需后缀,.lib,.a, .so都适用,这样就不用区分到底是哪种)
2024-01-08 16:38:21
1409
原创 c++ uml时序图
可以清晰地表示交互的先后顺序与时序关系,而流程图注重过程的控制流程,可以描述每个步骤的执行方式以及处理逻辑。时序图中参与交互的实体只有两类,即角色(Actor)和对象(Object)与时序关系,流程图则是针对一个过程或者活动进行全面而细致的展开。之间的复杂关系,流程图通常描述单一对象的各种操作和转换过程。通过描述对象之间发送消息的。显示多个对象之间的动态协作。重点是明确好角色和对象。
2023-09-06 10:06:44
613
原创 C++日志系统log4cxx
(记录器),(输出源)和(布局)。可以简单理解为日志类别,要输出的地方,输出形式。Logger创建LoggerLogger是有一个String类的名字识别的,且大小写敏感。root logger是所有logger的祖先,是一直存在的, 通过Logger.getRootLogger()获得,并且不能通过名字获得。public static Logger Logger.getLogger(String name) 获得或者创建一个Logger。
2023-07-21 10:52:46
761
原创 vs、c++环境下开发使用com组件
COM组件是一组接口的集合,由Win32动态链接库(DLL)或可执行文件(EXE)的形式发布的可执行二进制代码组成。com是独立于语言的组件体系结构,可以用C++、Java和VB等任意一种语言编写com对象。COM组件的优点有:通过接口对功能分类;功能扩充,只需添加接口就行;可轻松实现进程间调用、分布式调用;具有封装、继承、多态的面向对象特征。COM是规范,以该规范实现的DLL可视为COM组件。
2023-07-06 11:15:19
5840
原创 学习grpc
int b = 10;Run();return 0;protobuf对简单数据的赋值,简单数据直接采用set_xx()即可该xx为proto文件的定义消息上的变量//在proto定义的消息uint32Type=1;//类型stringPath=2;//路径type(Type);path对应获取变量为直接是。
2023-07-06 10:55:55
337
mqtt客户端qt例子
2024-10-15
qt QTcpServer多线程
2024-09-03
Qt 插件QPluginLoader的使用例子
2024-08-22
aws-sdk-cpp 1.11.370
2024-08-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人