c/c++
文章平均质量分 68
c/c++
aworkholic
路漫漫其修远兮,吾将上下而求索
展开
-
C++11线程池的简单实现
c++11中添加了线程库,从此标准库有了支持并发的方案。c++11标准中的线程使用极其简单,但是c++对于多线程的支持还是比较低级,高级一点的用法都需要自己实现。线程池原理任务量小时,可以一个任务对应一个线程,线程资源的创建与销毁的时间消耗、上下文切换资源占用都可以忽略。但是在高并发、高吞吐、低延迟的场景下,就必须降低线程资源管理的时间消耗,就需要使用线程池了。本文通过c++11的新特性实现一个线程池,通过管理一个任务队列、线程队列,将主线程中用户提交任务到一任务队列中,空闲的线程将从任务队列中获取任原创 2021-04-28 15:56:52 · 4155 阅读 · 2 评论 -
c++ string/char* 字符编码转换 (utf8,chs,gbk...)
本文用于介绍不同编码格式的string(char*)之间的转换。明确Unicode,UTF-8,string,wstring概念,以及locale name之前, 先简单了解两个概念字符集: 为每一个字符(asic,中文,日文,俄文等)分配一个唯一的ID(又称码位)。编码规则:将码位转换为字节序列的规则(编码/解码的过程)由于UTF-8使用广泛,以utf-8编码为例,介绍其与其它编码方式的流程。UTF-8广义的Unicode的一个标准,定义了一个字符集以及一系列的编码规则,即 Unicode原创 2021-02-23 12:16:24 · 38762 阅读 · 3 评论 -
std::shared_ptr<void>的工作原理,接管任意对象类并自动调用其析构函数
(多态使用)基类的析构函数需要声明称虚函数才能够保证delete基类指针的时候子类析构函数能够被正确的调用。如果delete的指针和其指向的真实类型不一样的时候,编译器只会调用指针类型的析构函数。用了shared_ptr以后带来的一个额外好处就是即便你的析构函数忘记写成virtual也能帮你正确的调用析构函数。原创 2021-01-21 16:11:51 · 2815 阅读 · 2 评论 -
C++函数/类模板与分离编译模式
模板分离编译,建议需要将用到的所有类型的模板在cpp中显式实例化, 当编译该cpp文件时,将会实例化对应类型的模板函数最终在对应的obj中生成符号链接,能够被其他模块调用。否则会出现无法链接的情况。原创 2020-12-11 17:52:03 · 1143 阅读 · 5 评论 -
opencv dnn模块 DNN中Layer的动态创建、Net自定义网络搭建示例
使用opencv的dnn功能,多数为直接加载第三方模型,同其他框架类似,opencv的dnn模块也是可以如同搭积木一样,拼装自己的网络结构(官方支持的层、自己注册的层).原创 2019-09-24 23:18:02 · 1480 阅读 · 0 评论 -
mini-caffe编译,用BLVC caffe编译的mnist模型进行测试
mini-caffe是最小化Caffe的运行版本,只用来forward,运算效率高、占用小,因此其极其适合用于在线测试。但是,如果你自己实现了非官方caffe的Layer,同样需要在mini-caffe中自己实现对应的计算代码。这篇文章用VS2015编译mini-caffe项目,记载caffe训练mnist数据生成的模型和deploy.prototxt,对测试图片进行分类。1、编译准备下载mini...原创 2017-09-28 22:21:38 · 2201 阅读 · 5 评论 -
caffe 中classification.cpp的源码详解、改写
caffe中给出了分类的实例源代码,在初学时会调用生成的classification.exe对mnist手写字符图像进行分类。首先,用注释的方式对源码进行详细的说明。另外,这个例子用了类的概念且内容比较繁杂,需要改写成在实际测试中使用的方式。1、classification.cpp的源码详解首先介绍一下源代码中的Classifier类。Classifier函数:根据模型的配置文件...原创 2017-09-27 22:21:10 · 3143 阅读 · 12 评论 -
Caffe-windows入门学习,编译、训练、测试详细教程
目录结构 一. 准备工作 二. 编译 2.1、开启相关caffe版本的编译开关配置内容 2.2、手动更改或者指定版本对应编译器目录 2.3、下载依赖文件dependencies文件到指定目录 2.4、编译 三. MNIST手写体字符识别(C++) 3.1、MNIST数据集下载 3.2、转换数据格式 3.3、训练和测试数据集 3.4...原创 2017-08-05 18:23:21 · 6400 阅读 · 3 评论 -
MFC中非模态对话框的控件字体输出
用到MessageBox时,必须鼠标点击之后,才能继续执行后面的程序。但是有时,只需要给出一个提示,在不需要点击按钮的情况下继续执行后面的操作,用到了非模态对话框去模拟一个MessageBox。 并且,在外部调用非模态对话框,并在文本框中输出文字。原创 2016-03-06 17:09:45 · 1091 阅读 · 0 评论 -
MFC中ftream操作CSV文件
CSV格式不用多说,逗号分隔,用文本编辑器打开,是按行存储;用excel打开,就是以”,”分隔的。 在实际操作中,发现fstream文件可以进行行获取,下面用fstream存储和读取,并提取了分隔后的文件字段。这里支持中文。1、包含文件后面用到了vector容器类,若需要自行添加。include <fstream>using namespace std;2、存储这里进进行简单了存储。 最后一行输原创 2015-11-22 18:15:04 · 2818 阅读 · 0 评论 -
opencv3.0+VS2013平台人脸检测MFC
OpenCV3.0+VS2013平台人脸检测MFC 说明: 本程序构建于VS2013基本对话框,调用了OPENCV3.0库,可以通过打开摄像头、打开图片,打开视频获取数据文件,再进行检测(最后有效果图),三者数据流之间可以任意切换。几点说明:视频和摄像机的显示和检测用到了定时器;在代码的现实中,图片是显示在控件中,用到CvvImage类,而OPENCV3.0库中没有这个类了,需要自己添加相原创 2015-07-22 11:35:17 · 5126 阅读 · 52 评论 -
linux c/c++串口通信
linux下串口通信c/c++代码示例。包含以下部分:打开串口,关闭串口,发送字符、字符串,发送格式化字符串,等待接收字符的数量,接收一个字符,释放缓冲区等。原创 2020-01-05 22:49:44 · 2036 阅读 · 0 评论 -
ini配置文件读取ConfigureParse
用于解析类似windows下ini配置格式文件。INI配置文件有三要素parameters,sections和comments。使用virant结构获取对象值。原创 2020-04-27 13:32:43 · 475 阅读 · 0 评论 -
树莓派 gpio / 串口通信
使用树莓派 3B+/4B 测试 gpio,配置硬件串口,测试串口通信等。这里的板子上40pin引脚有3中编码方式:1、Board编码:对应实际的物理插槽2、BCM编码:基本和GPIO的名字对应2、wiringPi编码:wiringPi库使用的引脚编码方式DB9公头接口定义在进行串口通信,两个设备间进行双向通信时,两个设备的RXD、TXD要交错连接。原创 2020-01-29 14:50:14 · 25286 阅读 · 6 评论 -
c++ 线程安全queue队列Logger日志
进程中单例模式Logger类,第一次getInstance()进行初始化后,并启动log输出线程。若不使用setLogFile()设置log输出文件,默认是标准输出std::cout。用户格式化的log信息,加锁入队,使用条件变量通知唤醒等待的log输出线程。log输出线程中,当队列不为空,就进行输出到制定文件或者std::cout,否者wait(),解锁,直到有入队唤醒,再次加锁原创 2020-01-15 23:16:57 · 1074 阅读 · 0 评论 -
c++ 带超时的线程安全队列 ThreadSafeQueue
1、使用场景当有一个队列在多线程使用时,必须保证资源同步,需要实现线程安全。根据pop实现策略,通常有几种实现方式:方法一:使用互斥锁, push、pop都尝试加锁互斥锁这种方式下,当队里为空时,需要不断加锁、解锁查询是否有最新的数据。方法二:使用条件变量和互斥锁在互斥锁的基础上,当队列为空时,pop睡眠,等待队列不为通过条件变量唤醒;相对上一种方式减少了反复查询过程中加解锁消耗资源的...原创 2019-12-26 16:21:17 · 5590 阅读 · 2 评论 -
A Presentation of the STL Vector Container
原文地址 http://www.codeproject.com/Articles/5378/A-Presentation-of-the-STL-Vector-ContainerDownload Console Demo - 6.19 KbDownload MFC Demo - 14.6 KbIntroductionThis article转载 2015-09-02 10:40:23 · 588 阅读 · 0 评论 -
c++ 操作符operator的重载
一个模拟Point点的类,内置函数类型为int.实现默认构造,自定义构造,拷贝构造、移动构造,拷贝赋值、移动赋值重载成员运算符函数 “operator+=”、“operator+”、“operator<<”重载非成员运算法函数 “operator*”1、类的声明class TestOperatorPoint {public: // default ...原创 2019-12-06 10:32:12 · 482 阅读 · 0 评论 -
std c++11 多线程编程 收集记录
1、[c++11]多线程编程(一)——初识2、[c++11]多线程编程(二)——理解线程类的构造函数3、[c++11]多线程编程(三)——竞争条件与互斥锁4、[c++11]多线程编程(四)——死锁(Dead Lock)5、[c++11]多线程编程(五)——unique_lock5、[c++11]多线程编程(六)——条件变量(Condition Variable)...原创 2019-09-10 10:53:13 · 230 阅读 · 0 评论 -
详解c++动态内存new/delete、智能指针shared_ptr、unique_ptr、weak_ptr
可编程内存基本上可分为以后三个大部分静态存储区、栈区、堆区简介。传统内存管理new和delete、分配智能指针shared_ptr、unique_ptr、weak_ptr的使用实例,以及他们彼此的联系和区别。简单介绍Allocate使用。原创 2019-08-01 12:22:25 · 4831 阅读 · 1 评论 -
Curl for People (crp)库介绍——高级用法
1、响应对象 (Response Objects)Response对象是数据包。他们的唯一目的是在请求结束时提供客户端信息 - 在API Response返回给您之后,没有任何API使用它。这个推理促使决定使响应的成员字段公开和可变。 一个Response有一下几个领域:long status_code; // The HTTP status code for the requests...原创 2018-04-03 17:21:50 · 3012 阅读 · 0 评论 -
Curl for People (crp)库介绍
1、编译crp库是在curl的基础上封装的一个使用便捷的库,linux下编译cmake比较简单。在windows下编译步骤有几点注意的地方,下面的编译会有提示。(使用版本:cpr-1.3.0,curl-7.59.0) 首先下载源码包,https://github.com/whoshuu/cpr/releases,下载之后需要在opt目录下放入依赖库 curl、googletest、mongo...原创 2018-04-03 17:04:30 · 2091 阅读 · 2 评论 -
jsoncpp库简单使用示例
jsoncpp库简单使用示例,utf8转换多字节字符,cmakelist.txt配置原创 2018-04-02 13:02:08 · 2028 阅读 · 1 评论 -
c++的拷贝构造、拷贝赋值、移动构造、移动赋值
#include #include #include #include int idx = 0;class MemoryBlock{public: int id = idx++; // Simple constructor that initializes the resource. explicit MemoryBlock(size_t length)原创 2018-01-19 17:35:05 · 1026 阅读 · 0 评论 -
VS2013生成Release版本MFC程序在其他机器上运行
对于自己机器安装了VS开发环境,生成MFC的exe文件能够在自己机器上运行,复制到其他目标机器可能出现不能运行的情况。下面就个人经历将发布的两中情况简要说明。1、工程属性中:配置属性-常规,MFC使用类型选择“在共享的DLL中使用MFC”;C/C++ - 代码生成-MFC的使用 选择“多线程DLL(/MD)” 这种情况下,若直接将exe文件放到目标机器运行,则需要目标机器安装相应的开发平台、或者将原创 2015-12-13 13:35:46 · 11253 阅读 · 2 评论 -
socket局域网传输文件
使用socket局域网传输文件server用于接收来自client发送的文件。server和client位于同一个局域网内就可以进行通信。 文件读写必须用二进制方式。server端有client连接时,开始接收数据,保存为文件。#include &lt;stdio.h&gt;#include &lt;fstream&gt;#include &lt;string&g...原创 2018-05-22 22:32:31 · 1850 阅读 · 0 评论 -
fstream读写文件注意问题
类ofstream, ifstream 和fstream是文件操作的三个类,分别从ostream, istream 和iostream 中派生而来。原创 2017-08-23 10:26:45 · 20756 阅读 · 0 评论 -
构造类cdib.cpp
// cdib.cpp#include "stdafx.h"#include "math.h"#include "process.h"#include "cdib.h"#include "GlobalApi.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE转载 2015-01-13 19:27:38 · 713 阅读 · 0 评论 -
链表的简单操作(建立,输出,插入,删除)
#include #include #define LEN sizeof(struct Student)int N=0; //节点数量struct Student{ long num; float score; struct Student *next;}*Head;struct Student *creat(void){struct原创 2014-08-05 13:18:05 · 601 阅读 · 0 评论 -
c++类的函数重载、重写示例
1、文件cls.h 头文件cls.h实现了基类Base1、Base2,和子类Derived1、Derived2。#pragma once#include <iostream>using namespace std;class Base1{public: Base1() { cout << "Constrution Base1" << endl; } //~Base1() {原创 2017-11-29 19:09:20 · 2313 阅读 · 0 评论