自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 C++11 线程池

#include <cstdlib>#include <string>#include <iostream>#include <memory>#include <thread>#include <vector>#include <queue>#include <mutex>#include <condition_variable>#include <atomic>#i.

2020-06-13 14:42:59 62

原创 linux下拷贝动态库遇到的问题

linux默认cp命令是有别名的,也就是说在执行cp命令的时候,实际上执行的是别名的命令。通过alias命令可以查看当前系统的别名设置情况:可以看到cp命令已经设置了别名。这样即使使用cp -f也不会生效。\cp会调用原生cp命令不使用别名,因此能达到效果。除了\cp外还有一种写法:#unalias cp#cp -rf ***首先取消别名,然后再调用。unalias命令不是永久生效的。===========通过ln -s 创建软链接语法为:ln -s 源文件路径 软链接文

2020-05-28 10:20:16 127

原创 类模板内的static成员变量

类模板内的static成员变量是在需要用的时候才会去调用类外初始化,否则实例化子类后,直接调用b的成员函数等时,会报错undefined reference#include <iostream>using namespace std;template <typename T>class CTest {public: class B { public: B() { cout << "construct B" &l

2020-05-21 17:13:53 74

原创 C++ 委托学习笔记

class A{public: void Func(int){...}};要取得Func函数指针,void (A::*pFunc)(int)=&A::Func;::*是一个特殊操作符,表示pFunc是一个指针,指向A的成员。获取成员函数的地址不能通过类对象来获取,必须通过类名获取,而且要加上取地址操作。那么如果通过指针来调用该函数,成员函数都隐含了一个this参数,表示函数要操作的对象,我们只获取了函数的指针,还缺少一个对象作为this参数,为了这个目的...

2020-05-13 11:17:11 72

原创 C++ 类型转换

Let’s begin with a review of casting syntax, because there are usuallythree different ways to write the same cast. C-style casts look like this: (T) expression // cast expression to be of type T Function-style casts use this syn

2020-05-12 15:44:40 45

转载 【转】C/C++中可变参数的详细介绍(va_list,va_start,va_arg,va_end)

可变参数的函数原理其实很简单,而va系列是以宏定义来定义的,实现跟堆栈相关.我们写一个可变函数的C函数时,有利也有弊,所以在不必要的场合,我们无需用到可变参数。如果在C++里,我们应该利用C++的多态性来实现可变参数的功能,尽量避免用C语言的方式来实现。 由于在C语言中没有函数重载,解决不定数目函数参数问题变得比较麻烦,即使采用C++,如果参数个数不能确定,也很难采用函数重载。对这种情况,提...

2020-04-28 09:55:54 76

原创 linux x86_64 下编译grpc总结

grpc库的编译需要依赖多个三方库,官方建议通过./.gitmodules去获取依赖库,但我的linux环境是不能联网的,必须离线安装。查看./.gitmodules文件,其实是去github把代码拉取到gprc的thirdparty/对应的目录下,具体如下将编译过程中缺少的三方库在windows下载好,拷贝至对应的目录即可编译过程中会报错unrecognized command ...

2020-04-15 09:45:21 174

原创 Parallel Quicksort using a stack of pending chunks to sort

代码源自C++ Concurrency in Action Second Edition#include <list>template<typename T>struct sorter{ struct chunk_to_sort { std::list<T> data; std::promise&lt...

2020-03-25 15:50:46 64

原创 通过递归打印组合

void PrintNum(int nNum, std::vector<int>& vecNums);void PrintNumOut(int nNum){ std::vector<int> vecNums{ 0,0,0,0 }; PrintNum(nNum, vecNums);}void PrintNum(int nNum, s...

2020-03-05 09:52:38 51

原创 C++的future,promise,packaged_task

1. future与async配合使用个人理解就是用future获取该线程函数的返回值,并可以知道该线程函数何时执行完;#include <iostream>#include <string>#include <thread>#include <future>unsigned long long CalcuBigNum(unsig...

2020-01-15 10:34:08 92

转载 C++11 并发指南三(Lock 详解)

文章转自https://www.cnblogs.com/haippy/p/3346477.html感谢大佬 侵删在 《C++11 并发指南三(std::mutex 详解)》一文中我们主要介绍了 C++11 标准中的互斥量(Mutex),并简单介绍了一下两种锁类型。本节将详细介绍一下 C++11 标准的锁类型。C++11 标准为我们提供了两种基本的锁类型,分别如下:std::lo...

2019-12-18 14:49:06 62

原创 “最令人头痛的语法解析”(C++’s most vexing parse)

如果你传递了一个临时变量,而不是一个命名的变量;C++编译器会将其解析为函数声明,而不是类型对象的定义。例如:std::thread my_thread(background_task());这里相当与声明了一个名为my_thread的函数,这个函数带有一个参数(函数指针指向没有参数并返回background_task对象的函数),返回一个 std::thread 对象的函数,而...

2019-12-13 10:53:46 198

原创 Effective C++ 条款25

25namespace WidgetFunc { template <typename T> class Widgett { public: template <typename T> Widgett(T* pcObj, size_t size) { m_pcO...

2019-10-18 16:41:04 47

原创 C++中大数运算简单处理

这里说的是在数据类型表示范围内的处理,如果是非常大的数,可以封装bignumber用字符串运算。遇到问题是unsigned long long int = 1024*1024*1024*4;用一个超级大的类型在32位程序上,只要超过int表示范围也会变为0,因为右边的默认为int操作,所以需要指定类型:u :表示无符号整形(unsigned)l:表示long类型...

2019-10-11 09:48:37 197

转载 C++模拟鼠标键盘操作(转)

API 或 MFC 视窗程序 里 有 函数,例如 API 函数 设位置:BOOL SetCursorPos( int x, int y); 参数是屏幕坐标x,y头文件 Winuser.h链接库 #pragma comment (lib, "User32.lib") 或取位置 GetCursorPos(&p);显示鼠标 int ShowCursor( B...

2019-10-11 09:39:22 634 1

原创 linux下计算pod的cpu利用率与mem使用情况

一、计算CPU利用率(计算方式与top指令源码方式相同)1.计算宿主机的cpu核数2. 从文件中读取本身进程的一段时间使用情况,即隔一段时间分别获取使用情况,通过这段时间的(使用时间)/(总时间),即可得到cpu利用率,代码如下:#include "stdlib.h"#include "stdio.h"#include "unistd.h"#include <ios...

2019-08-05 20:03:11 378

原创 linux下,C++编译报错 undefined reference to "XXX"

在编译工程的时候遇到了这个问题,前提是头文件与库文件都是正确的,且CMakeLists.txt已将库和头文件配置进去了,结果编译时仍然报错无法解析的外部符号,究其原因,是因为库之间存在依赖关系,写CMakeLists时,需要将被依赖的库写在后边,将库的依赖顺序调整好后,编译通过。...

2019-06-14 17:20:07 621

原创 C++11中的右值引用

个人理解就是用一个变量引用一个右值,比如将亡值,以延长其生命周期。变量引用的是右值,不过变量本身还是个左值。#include <iostream>struct MyString{ MyString() { m_szStr = 0; m_size = 0; } MyString(char* str) ...

2019-05-07 20:59:41 224

原创 type_traits学习

获取T的原始类型,我们通过std::remove_reference移除引用,需要获取智能指针指向的对象时需要对原始类型U添加左值引用。#include <iostream>#include <type_traits>#include <memory>template <typename T>struct Const...

2019-05-06 17:30:50 200

转载 win32模拟鼠标动作

#include<iostream>#include<windows.h>#include <thread>#include <functional>using namespace std;void thMoveMouse(){ POINT p; while (1) { GetCursorPos(&a...

2019-05-05 10:37:01 436

转载 C++文件读写详解(ofstream,ifstream,fstream)

C++文件读写详解(ofstream,ifstream,fstream)  这里主要是讨论fstream的内容:1 #include <fstream> 2 ofstream //文件写操作 内存写入存储设备 3 ifstream //文件读操作,存储设备读区到内存中 4 fstream //读写操作,...

2019-04-24 09:39:37 106

原创 Kafka学习笔记

初入公司,接到一个卡夫卡的问题,将学习笔记输出在这里。Kafka相关资料Kafka 就是一款基于发布与订阅的消息系统。它一般被称为“分布式提交日志”或者“分布式流平台”。Kafka 的数据单元被称为消息,消息可以有一个可选的元数据 ,也就是键。批次就是一组消息,这些消息属于同一个主题和分区。Kafka的基本术语TopicKafka将消息种子(Feed)分门别类,每一类的消息...

2019-04-24 09:21:10 186

原创 memcpy与memcpy_s的使用

 strcpy_s、memcpy_s等具有缓冲区大小检查的函数,可以有效的检测内存溢出,找到出错的代码。但是strcpy、memcpy这样的出错了需要自己扒代码。下面是两者使用的一个例子:char szTmp[30] = { 0 };int nd = sizeof szTmp;memcpy_s(szTmp, sizeof szTmp, szBuf, sizeof szTmp);me...

2019-02-19 13:24:03 13287

转载 MFC中显示图片

// TODO: 在此添加控件通知处理程序代码 CString strFilePath = "E:\\JnPlatformV2.1\\bin\\Debug\\0.jpg"; CImage image; image.Load(strFilePath); //以下两个矩形主要作用是,获取对话框上面的Picture Control的width和height, ...

2019-02-14 16:47:41 547

原创 lambda表达式中的参数列表

首先,与普通函数的参数列表一致。如果不需要参数传递,则可以连同括号“()”一起省略。可以在lambda表达式末尾用括号添加参数列表的参数,例子如下:void TestLambda(){ int a = 1; int b = 2; auto funcAdd = [=, &b](int c, int d) { return b += ...

2019-02-14 11:59:00 620

原创 注册OCX控件并在VS2013的mfc程序中使用及常见问题总结

注册OCX控件需在cmd内使用regsvr32命令,具体操作如下图1.模块"XXX.ocx"已加载,但对DllRegisterServer的调用失败,错误码为0x80040201这个问题应该是未使用管理员身份运行cmd导致。2.模块"XXX.ocx"加载失败。请确保该二进制存储在指定的路径中,或者调试它以检查该二进制或相关的.DLL文件是否有问题。找不到指定的模块。...

2019-02-01 11:03:57 1280

原创 VS2013 C++ Rest SDK 环境配置方法

简介C++ REST SDK 是 Microsoft 的一个开源跨平台项目( 使用 MIT 开源协议 ), 其使用大量现代异步 C++ API 实现了一个基于 HTTP / HTTPS 协议的 服务端 / 客户端 组件,使用该组件,可以方便地进行高性能RESTful、HTTP / HTTPS 服务器、客户端开发,且可以在Windows、Linux、OSX、iOS、Android各平台下使用,各...

2019-01-29 14:56:52 2171 1

转载 map的insert返回值

关于map容器的insert成员的返回值说明:(1)map对象中一个给定键只对应一个元素。如果试图插入的元素所对应的键已在容器中,则insert将不做任何操作;(2)含有一个或一对迭代器形参的insert函数版本如:m.insert(beg,end),并不说明明是否有或有多少个元素插入到容器中。(3)但是,带有一个键-值pair形参的insert版本将返回一个值:包含一个迭代器和一个bool...

2019-01-28 10:31:54 867

原创 三个线程按顺序打印ABC

首先思路是一个线程在工作时,需要阻塞另外两个线程,这样需要三个线程共用一个互斥锁,但问题是怎样指定顺序呢。想到的办法是通过一个全局变量nFlag,以此判断下一个应该打印哪一个字母。但是如何指定呢,比如A打印完成后,nFlag指定B,而C线程继续等待。可以在进入互斥锁前设定一个死循环,没有轮到的字母一直阻塞在这里,而轮到的线程进入工作状态。所以代码如下// InOrderABC...

2019-01-24 11:48:27 280

原创 LoadLibraryEx报错GetLastError返回错误193

HINSTANCE m_DLL = ::LoadLibraryEx("E:\\JnPlatformV2.1\\bin\\Debug\\Plugins\\Uniview\\NetDEVSDK.dll", NULL, LOAD_WITH_ALTERED_SEARCH_PATH);auto Lasterror = GetLastError();上边的代码返回错误193,即%1 不是有效的 Win...

2019-01-23 11:50:32 2558

原创 fstream逐行读取内容并写入

#include <string>#include <vector>#include <map>int _tmain(int argc, _TCHAR* argv[]){ std::fstream File; File.open("E:\\茂名石化错误码.txt"); std::vector<std::string&gt...

2019-01-10 15:59:33 672

原创 UTF-8转码

#include <string>#include <locale>#include <codecvt>std::string UnicodeToUTF8(const std::wstring & wstr){ std::string ret; try { std::wstring_convert< st...

2018-11-28 11:21:35 192

转载 获取程序自身窗口句柄(cmd)

HWND GetConsoleHwnd(void){#define MY_BUFSIZE 1024 // Buffer size for console window titles. HWND hwndFound; // This is what is returned to the caller. char pszNewWindowTitle[MY_BUFS...

2018-11-08 11:00:31 957

转载 C++中类大小的计算

c++中类所占的大小计算并没有想象中那么简单,因为涉及到虚函数成员,静态成员,虚继承,多继承以及空类等,不同情况有对应的计算方式,在此对各种情况进行总结。首先要明确一个概念,平时所声明的类只是一种类型定义,它本身是没有大小可言的。 我们这里指的类的大小,其实指的是类的对象所占的大小。因此,如果用sizeof运算符对一个类型名操作,得到的是具有该类型实体的大小。关于类/对象大小的计算首先...

2018-11-07 16:49:11 70

原创 win32程序增加mfc支持

首先,在 stdafx.h中,屏蔽掉 #include<windows.h>然后在 stdafx.h中加入#ifndef VC_EXTRALEAN #define VC_EXTRALEAN        // 从 Windows 头中排除极少使用的资料 #endif  #include <afx.h> #include <afxwin.h>   ...

2018-10-31 11:11:01 514

原创 解决error MSB6006: “CL.exe”已退出,代码为 -1073741515。

我的VS2012出现莫名其妙的问题。到C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin目录下找到的cl.exe;发现cl.exe打开会报错;结果是缺少msobj110.dll、mspdb110、mspdbcore.dll及mspdbsrv.exe这几个文件;将C:\Program Files (x86)\Micro...

2018-10-24 10:45:19 17698 2

原创 数据结构

vector:数组。 assign提供容器不同但元素类型相同的拷贝功能,但参数不能是指向自己的迭代器。insert(iter,val);插入到iter指向元素前面,返回的迭代器指向新插入的元素。如果是如下的,则返回的迭代器指向第一个插入的元素,即999auto iterVec = vecInt.insert(vecInt.begin()+5, 999);// ite...

2018-10-22 21:40:17 91

原创 常用工作函数代码

1.产生从 nStart到nEnd的连续不重复随机数#include <time.h> // time(0)#include<stdlib.h> // rand srand#include <process.h> // getpidint randNum(__in int nStart, __in int nEnd, __...

2018-10-18 11:40:25 119

原创 工厂设计模式

下面例子中鼠标,键盘,耳麦为产品,惠普,戴尔为工厂。简单工厂模式简单工厂模式不是 23 种里的一种,简而言之,就是有一个专门生产某个产品的类。比如下图中的鼠标工厂,专业生产鼠标,给参数 0,生产戴尔鼠标,给参数 1,生产惠普鼠标。#include "stdafx.h"#include <iostream>//简单工厂模式是属于创建型模式,又叫做静态工厂方法(s...

2018-10-10 14:50:10 2444

转载 什么时候使用引用、什么时候使用指针

使用引用参数的主要原因有两个:程序员能修改调用函数中的数据对象 通过传递引用而不是整个数据–对象,可以提高程序的运行速度一般的原则:对于使用引用的值而不做修改的函数: 如果数据对象很小,如内置数据类型或者小型结构,则按照值传递 如果数据对象是数组,则使用指针(唯一的选择),并且指针声明为指向const的指针 如果数据对象是较大的结构,则使用const指针或者引用,已提高程序的效率。这样...

2018-10-08 14:27:48 720

提示
确定要删除当前文章?
取消 删除