C++
文章平均质量分 72
w_b_h
这个作者很懒,什么都没留下…
展开
-
Windows下glog的编译和使用
最近在项目中使用了glog库控制log的输出,在此记录下glog库的编译和使用的过程。首先我们来看如何编译glog1.从github上下载glog的源码。我们这里将源码下载到文件夹E:\3PartyLibrary下。2.然后使用cmake-gui生成vs解决方案。如下图所示。3.cmake的过程中需要注意图中6个用红色框框起来的部分。第一个是源码路径,选择我们代码存放的位置。第二个是生成解决方案的路径,我们在源码同级目录下创建一个文件夹,命名为glog-master-build。原创 2020-07-01 20:43:25 · 2924 阅读 · 1 评论 -
Visual Studio 常用扩展插件
最近整理了一下我的VS中常用的几个扩展插件,作以记录。1.Highlight all occurrences of selected word这个插件能够将当前文档中相同单词全部高亮。这个插件还有深色主题版,名字是Highlight all occurrences of selected word(for dark themes)2.End of the Line这个插件能够标识出行尾是CRLF还是LF,即使用的是Windows的换行符还是Linux的换行符。3.Line Endin原创 2020-07-01 17:48:57 · 1628 阅读 · 0 评论 -
Git首次配置
好久没有更新博客了,因为去年换了新工作,工作微忙,再加上比较懒,就一直没有写博客。因为最近新发布了树莓派4,准备入手玩一玩,就配置了Git,准备管理些代码。因为在这台电脑上是首次配置Git环境,所以写此博客记录下配置过程以及从github上下代码时遇到的问题。第一步:下载并安装git。Git是在官网下的,官网的网址是https://git-scm.com/。直接点击右侧的Downl...原创 2019-07-21 23:16:09 · 842 阅读 · 1 评论 -
多线程编程——线程间共享数据(临界区&互斥锁)
线程间共享数据的方法:1、全局对象;2、堆对象(动态创建的对象);任何时刻只允许一个线程对共享资源进行访问的方法:1、临界区(Critical Section);(首选)2、互斥锁(Mutex);临界区和互斥锁的区别: MutexCritical Section性能和速度慢(Mutex是内核对象,执行相关函数时原创 2018-01-14 13:57:01 · 1269 阅读 · 0 评论 -
多线程编程——信号量的第二种应用_允许有限的线程同时访问临界资源
本例中定义了一个信号量,该信号量只允许最多两个访问者同时对资源进行访问。而程序中有三个访问者,因此第三个访问者就要等前两个访问者结束后才能进行访问。与信号量的第一种应用(同步)不同的是,同步应用中,信号量的初始值是0,而本应用中,信号量的初始值为2,即允许同时访问资源的最大线程数。#include #include #include #include HANDLE hSemaph原创 2018-01-14 13:52:53 · 330 阅读 · 0 评论 -
多线程编程——线程间的通知机制(二)信号量
上一篇文章介绍了线程间通知机制的第一种方法,轮询方式。本文介绍线程间通知机制的第二种方法,使用信号量的方式。例:生产者向buffer中放入物品,放入物品后通知消费者有物品放入,消费者收到通知后去buffer中取物品并处理。(这也就是所谓的同步。同步的概念:a任务一直等待信号量,b任务定时释放信号量,完成同步功能)因为涉及到线程间共享数据,所以这里也要加上互斥锁。#include原创 2018-01-14 13:39:45 · 634 阅读 · 0 评论 -
多线程编程——线程间的通知机制(一)轮询
多线程编程中,有时需要线程之间相互通讯,例如生产者生产出产品后,需要通知消费者来取。这时就涉及到了线程间的通知机制。常用的线程间通知机制有两种,一种是轮询,另一种是信号量。本文介绍轮询方式,下一篇文章介绍信号量方式。所谓轮询机制就是说,当生产者生产出产品后,将产品放入buffer中,同时消费者不断地检测这个buffer是否有产品,如果有则取出,如果没有则继续不断地检测该buffer。下面通原创 2018-01-14 13:25:50 · 1821 阅读 · 0 评论 -
多线程编程——线程的创建
创建线程有两个函数可以使用:1、_beginthreadex()2、CreateThread()说明:1、前者是Mulit-Threads C Runtime库中的函数,后者是Windows API 库中的函数。2、前者是对后者的封装。3、前者使得每个线程都将拥有自己专用的一块内存区域来供标准C运行库中所有有需要的函数使用。4、如果线程中调用了C Run Time原创 2018-01-14 13:23:45 · 198 阅读 · 0 评论 -
UDP receive 代码
本代码为使用UDP协议接受信息的代码。#include #include int main(){ printf("接收方:port=9001...\n"); SOCKET sock; sockaddr_in local;//本地ip和端口 sockaddr_in remote;//远端ip和端口,先不用管,接收到信息后自动为其赋值 int addr_len = sizeo原创 2018-01-14 13:13:44 · 1320 阅读 · 0 评论 -
UDP send 代码
这里列出了两种方法,第一种是不指定本地端口号和ip,第二种是指定本地端口号和ip。首选第二种。方法一:#include #include int main(){ printf("发送方:\n"); SOCKET sock; sockaddr_in remote;//远端地址 int addr_len = sizeof(sockaddr_in); char buf[1原创 2018-01-14 13:10:42 · 2332 阅读 · 0 评论 -
TCP server 代码
本代码为tcp服务器端的C++代码,代码实现的功能是接受客户端的请求,当客户端发送来的信息时,回复“OK”字符串。服务器端工作原理:服务器首先开启一个socket,并一直监听这个socket。这时,程序在accept处阻塞。当有请求过来时,就会accept成功。accept成功后会返回一个新的socket,这个新的socket负责服务器与这个客户端的通讯。这时主线程新建一个子线程,并将原创 2018-01-14 13:07:37 · 502 阅读 · 0 评论 -
TCP client 代码
本代码为tcp客户端C++代码,代码功能是向服务器端发送"help me"字符串,如果服务器端有相应,就会向客户端回复一段字符串。因为客户端和服务器的程序都运行在本机上,因此,服务器的IP设置为本机IP即127.0.0.1,服务器的端口为9555。下面是客户端程序的代码。/*client*/#include #include #include #pragma comment(lib原创 2018-01-14 12:59:53 · 804 阅读 · 0 评论 -
JSON之——使用cJSON库
本文通过简单示例展示使用cJSON库进行JSON构造和解析的方法。构造的json字符串为:{"num":0,"str":"teststring"}#include #include "cjson\cJSON.h"#include #include using namespace std;int main(){ //构造 cJSON *json = cJSON_Cre原创 2018-01-13 17:16:52 · 2365 阅读 · 0 评论 -
JSON之——jsoncpp库
本文使用jsoncpp库,进行JSON的构造和解析的操作。本文构造的JSON字符串为:{"extra":null,"id":1001,"login":true,"name":"xiaoming"}一、构造Json::Value req;req["id"] = 1001;req["name"] = "xiaoming";req["login"] = true;req["extra原创 2018-01-13 16:29:04 · 486 阅读 · 0 评论 -
tinyxml(三)——简单的生成和解析示例
#include #include using namespace std;#include "../tinyxml/tinyxml.h"int test1(){ TiXmlDocument xml_doc; /*建立*/ //a TiXmlElement* xmlElemA = new TiXmlElement("A"); TiXmlText* xmlTextA = ne原创 2018-01-13 16:18:29 · 235 阅读 · 0 评论 -
tinyxml(二)——XML文件的解析
被解析的文件为test.xml,文件内容如下: AAA xiaoming 200801 解析该文件的C++程序如下:#include #include "../tinyxml/tinyxml.h"int main(){ // 解析xml TiXmlDocument xml_doc; if(!xml_doc.Load原创 2018-01-13 16:11:59 · 724 阅读 · 1 评论 -
tinyxml(一)——XML文件的生成
#include #include using namespace std;#include "../tinyxml/tinyxml.h"int test1(){ TiXmlDocument xml_doc; // 添加XML声明 xml_doc.LinkEndChild(new TiXmlDeclaration( "1.0", "GBK", "" )); // 添加根元原创 2018-01-13 16:04:53 · 620 阅读 · 0 评论 -
matlab函数编译成库供C++调用(非常详细)
MATLAB具有着很高的计算性能,一些算法用MATLAB很容易实现,而用C++很难实现,如果想在C++中调用MATLAB编写的函数,可以将该函数编译成库文件,之后在C++中对其进行调用。本文详细讲解如何将MATLAB函数编译成库,并在C++中进行调用。方法可行,本人亲测。第一步、原创 2017-07-06 17:03:36 · 28893 阅读 · 33 评论