
c/c++
文章平均质量分 51
ChenHui246
这个作者很懒,什么都没留下…
展开
-
Linux下查看一个进程中所有线程及其运行的简略信息
ps -mp pid -o THREAD,tid,time[root]# ps -mp 1 -o THREAD,tid,timeUSER %CPU PRI SCNT WCHAN USER SYSTEM TID TIMEroot 22.5 - - - - - - 1-02:47:59root 0.0 19 - hrtime - - 1 00:00:05root 0.4 ...原创 2021-05-20 16:00:30 · 388 阅读 · 0 评论 -
make接收宏定义参数
makefile接收make参数并传递到代码里面ifneq($(strip$(DEF_SVR_OFFSET_INDEX)),)DEFINES+=-DDEF_SVR_OFFSET_INDEX=$(DEF_SVR_OFFSET_INDEX)endif原创 2021-03-11 11:30:33 · 859 阅读 · 0 评论 -
C++ map hash , [] 和 find的区别
map 和 hashmap 在使用上需要注意 [] 和 find的区别,数据不存在时 [] 会开辟内存 而find 不会。这个特性很重要。这个特性很重要,假如一个map当前size是1,使用[]访问一个不存在的key时,你再去取size,发现 size变成2 了,就是这么叼。***再假如,高并发多线程程序访问map 或 hash 的时候,为了提高性能使用读写锁,如果你再读锁里面使用[] 访问一个不存在的数据时,那就有可能崩溃了。******...原创 2021-02-24 18:02:41 · 618 阅读 · 0 评论 -
new对象数组的时候怎么设置构造函数参数
问题:c++中有带参数构造函数的类,new对象数组的时候怎么设置构造参数?比如classUser{intm_age;public:User(inta_age):m_age(a_age){}};User*l_us =new User[6];//怎么把参数放进去呢解决方法:intl_age=10000;// 分配内存User*l_us=(User*)operatornew(6*sizeof(User));for(inti=...原创 2021-01-23 15:02:08 · 1586 阅读 · 0 评论 -
boost bind 和 boost function学习
#include<iostream>#include<boost/function.hpp>#include<boost/bind.hpp>usingnamespacestd;boolsome_function(inta,intb){cout<<"a="<<a<<"b="<<b<<endl;returna<b...原创 2020-06-24 20:29:12 · 186 阅读 · 0 评论 -
C++从圆弧中随机一个点
#include<iostream>#include<cmath>#include<vector>#include<random>#include<stdio.h>usingnamespacestd;constinteps=1e-2;//精度#definePI3.1415926...原创 2019-12-06 00:52:19 · 621 阅读 · 0 评论 -
C++ mysql 连接 设置编码
创建mysql连接之后为连接设置一下 utf8 编码原创 2019-10-14 22:19:12 · 386 阅读 · 0 评论 -
C++计算数组大小、数组拷贝
原创 2018-01-10 10:57:40 · 3322 阅读 · 0 评论 -
分布式高并发服务--幂等性
重复消息是SOA服务实现中非常常见的问题,你永远不要指望调用方每次请求消息不一样,对于读操作,重复消息可能无害,可对于写操作很可能就是灾难。可以通过幂等(Idempotent)模式处理重复的消息,基本处理思路是:1、调用者给消息一个唯一请求ID标识。ID标识一个工作单元,这个工作单元只应执行一次,工作单元ID可以是Schema的一部分,也可以是一个定制的SOAP Header,服务的Contrac...转载 2018-03-08 21:43:42 · 1619 阅读 · 0 评论 -
linux boost thread
linux centos 安装boost的方法, 1 yum install boost 2 yum install boost-devel 3 yum install boost-doc安装成功。#include <iostream>#include <boost/thread/thread.hpp>using namespace std;usi...原创 2018-04-05 18:06:42 · 545 阅读 · 0 评论 -
使用boost库实现的 http get操作
/* * HttpBoostCL.h * * Created on: 2018年4月10日 * Author: Administrator */#ifndef BOOSTSTUDY_HTTPBOOSTCL_H_#define BOOSTSTUDY_HTTPBOOSTCL_H_#include <boost/asio.hpp>using boost::asio::ip::tc...原创 2018-04-12 21:33:43 · 2598 阅读 · 0 评论 -
C++ librdkafka一次崩溃记录
1、失败的地方#define rd_assert(EXPR) assert(EXPR)2、realloc失败realloc非常容易失败,当内存比较大时!https://zhidao.baidu.com/question/2011437754906553988.html3、原因定位:rebalance回调会导致realloc崩溃 ...原创 2018-09-18 17:37:13 · 946 阅读 · 0 评论 -
Linux C++ 信号量学习 sem_init sem_post sem_wait sem_timedwait
一、函数简介信号量的数据类型为结构sem_t,它本质上是一个长整型的数。函数sem_init()用来初始化一个信号量。它的原型为: extern int sem_init __P ((sem_t *__sem, int __pshared, unsigned int __value)); sem为指向信号量结构的一个指针;pshared不为0时此信号量在进程间共享,否则只能为当前进程...原创 2018-10-11 21:49:17 · 8504 阅读 · 0 评论 -
json和protobuf互转
Javahttp://code.google.com/p/protobuf-java-format/C++https://github.com/shramov/json2pbPythonhttps://github.com/NextTuesday/py-pb-converters导入模块pbjson.py即可使用。ps. 原始模块的pb2json函数会自动过滤protob...转载 2018-11-20 14:24:46 · 2680 阅读 · 0 评论 -
C++ vector 中使用pair
#include <iostream>#include <vector>using namespace std;int main(){ // int64_t li64test; // cout<<li64test<<endl; std::vector<pair<int,int> > vec; ...原创 2018-11-28 20:46:19 · 1848 阅读 · 0 评论 -
MSEC
https://github.com/Tencent/MSEC原创 2018-12-22 14:07:49 · 525 阅读 · 0 评论 -
GDB attach 调试运行中的程序
程序运行时,某个线程在某个逻辑分支卡住了一直出不来,逻辑比较复杂,判断不出来是哪个位置。因此用gdb attach 跟踪现在线程卡在哪个位置。gdb attach [pid] 调试某个进程info threads 查看该进程内所有的线程 状态thread [tid] 进入某个线程bt ...原创 2019-03-12 22:49:41 · 1729 阅读 · 0 评论 -
C++ stl list 踩坑
C++ stl list 获取size()函数非常慢,跟shi一样,生产环境中使用被坑了,有时间看一下源码,严重怀疑是现算的。#include <iostream>#include <list>#include <stdlib.h>#include <stdio.h>#include <sys/types.h>#inc...原创 2019-07-20 23:58:20 · 604 阅读 · 0 评论 -
C++ map转换到vector
/************************************************************************* > File Name: map2vec.cpp > Author: chenhui > Mail: ********* > Created Time: 2019年08月 5日 22:45:15...原创 2019-08-05 22:54:24 · 6068 阅读 · 0 评论 -
C++进程学习:fork
每个进程都有一个进程控制块(PCB)来维护进程相关信息,Linux内核的进程控制块是task_struct结构体,主要包含以下信息: 。进程 id。系统中每个进程有唯一的 id,在 C 语言中用 pid_t 类型表示,其实就是一个非负整数。· 。进程的状态,有运行、挂起、停止、僵尸等状态。· 。进程切换时需要保存和恢复的一些 CPU 寄存器。· 。描述虚拟地址空间的原创 2016-02-20 10:13:59 · 892 阅读 · 0 评论 -
C++ map和hash_map简单对比
C++ map 和 hash_map 对比map的基本数据结构是平衡二叉树,hash_map的基础数据结构是hash_table哈希表,下面程序展示了向map和hash_map中插入数据消耗时间对比。数据量较小的时候可以选择map,数据量大、对插入查找效率要求高的时候选择hash_map。/**********************************************原创 2017-12-21 17:29:07 · 4502 阅读 · 2 评论 -
二进制转化为16进制字符串
void BibaryToHex(const unsigned char * src, char *dst, int len){int i = 0, j = 0;unsigned char left = 0x0f;unsigned char right = 0xf0;unsigned char tmp = 0;for (i =0; i{tmp = (src[i] &原创 2017-08-11 16:13:19 · 829 阅读 · 0 评论 -
Linux 线程锁
两个线程分别计算从1加到100,并且把结果都存储在count变量中。因此为了保证数据的线程安全,在对count值进行写操作时要加锁。加锁可以通过pthread_mutex_lock()和pthread_mutex_unlock()两个函数来实现加锁与释放锁。但是实际应用中为了代码简洁以及防止程序员漏掉unlock,所以通过一个线程锁对象来实现线程锁的自释放。Thre原创 2016-04-09 20:25:26 · 676 阅读 · 0 评论 -
C++ explicit关键字详解(转自博客园:网名还没想好)
首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数,它的作用是表明该构造函数是显示的,而非隐式的,跟它相对应的另一个关键字是implicit,意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子:1.class CxString // 没有使用explicit关键转载 2016-04-08 16:40:44 · 292 阅读 · 0 评论 -
使用Thrift RPC编写程序
1. 概述本文以C++语言为例介绍了thrift RPC的使用方法,包括对象序列化和反序列化,数据传输和信息交换等。本文采用了一个示例进行说明,该示例主要完成传输(上报日志或者报表)功能,该示例会贯穿本文,内容涉及thrift定义,代码生成,thrift类说明,client编写方法,server编写方法等。关于Thrift架构分析,可参考:Thrift架构介绍。关于Thrift文件转载 2016-03-27 04:28:31 · 284 阅读 · 0 评论 -
C++pair的用法
类模板:template struct pair参数:T1是第一个值的数据类型,T2是第二个值的数据类型。功能:pair将一对值组合成一个值,这一对值可以具有不同的数据类型(T1和T2),两个值可以分别用pair的两个公有函数first和second访问。#include #include using namespace std;int main(){原创 2016-02-27 21:29:31 · 409 阅读 · 0 评论 -
C++ 中使用json
1、下载json源码http://sourceforge.net/projects/jsoncpp/2、解压,创建一个文件夹JSONTEST,在里面创建一个Json.cpp文件和一个文件夹命名为json。#include #include #include #include "json/json.h"using namespace std;int原创 2016-02-25 09:42:47 · 959 阅读 · 0 评论 -
C++ union 联合
1、共用体是一种特殊的数据类型,允许在相同的位置存储不同的数据类型。2、可以定义一个带有多成员的共用体,但是任何时候只有一个成员带有值。3、共用体占用内存应足够存储共用体中最大成员。例如:union data { //声明了三个成员,但是长度不一(后面sizeof的结果不同机器结果不同,但double肯定是最长的),于是编译器会选取double的长的作为union data的长度原创 2016-02-17 17:56:34 · 477 阅读 · 0 评论 -
C++ 字符串防止溢出:strncpy,snprintf,strnlen,memset的使用
C++字符串的使用时最容易出现溢出,通过使用strncpy(),snprintf(),strnlen(),memset()这几个函数可以帮助我们减少溢出的出现。char *strncpy(char *dest, const char *src, size_t n);src串的长度应该小于dest缓冲区的大小,且n为dest缓冲区的大小减1或者更小,即至少留出一个位置给'\0'。原创 2016-03-01 22:58:14 · 4392 阅读 · 0 评论 -
C++ enum
enum是枚举类型,有些时候一种变量可能只有几个取值,这时可以使用枚举。#include int main(){ enum{ DEF_INT=0, DEF_STR, DEF_FLOAT }; printf("int is %d\n",DEF_INT); printf("string is %d\n",DEF_ST原创 2016-01-31 16:48:06 · 325 阅读 · 0 评论 -
C++泛型函数:函数模板
首先说一下函数重载,函数重载就是能够使不同函数使用同一个函数名,只要它们的参数不同即可。可以同时定义两个名字一样的函数,但参数类型不同。void Print(int a){cout}void Print(char a){cout}...调用时可以直接使用函数输出不同类型的值:Print(12);Print('s');这称为函数重载,这种方式有原创 2016-01-28 11:36:09 · 827 阅读 · 0 评论 -
C++ map 转 string(自己实现的小代码)
实际应用中需要将map的内容打印出来作为日志,因此写了一个通用函数。用到了函数模板和函数重载。注:使用g++进行编译。/************************************************************************* > File Name: maptoStr.cpp > Author: chenhui > M原创 2016-05-27 22:47:35 · 6882 阅读 · 0 评论 -
C++ 遇到的bug,自己的问题,交叉引用了
心情难以平静,调bug调了一天。Compiling chatserver ../Src/config_redis.cpp -----------------------------------------------------0g++ -c -w -D__cplusplus -pthread -fshort-wchar -fPIC -rdynamic -w -O3原创 2016-04-20 21:14:46 · 430 阅读 · 0 评论 -
Linux C++ 无锁编程 cas
(先保存,以后再整理)高并发服务器经常用到多线程编程,需要对共享数据进行操作,为了保护数据的正确性,有一种有效的方法就是加锁pthread_mutex_t。但是加锁会引起性能的下降,多个线程竞争同一个锁,抢占失败后强制上下文切换。/*************************************************************************原创 2017-07-01 19:11:02 · 4460 阅读 · 0 评论 -
MySQL自动重新连接
MySQL连接超时。如果使用了长连接而长期没有对数据库进行任何操作,那么在 timeout值后,mysql server就会关闭此连接,而客户端在执行查询的时候就会得到一个类似于“MySQL server has gone away“这样的错误。解决方法有两个:1) 增大/etc/my.cnf中wait_timeout的值,比如设置wait_timeout=8640000,即100天。这个转载 2017-05-12 15:42:07 · 3939 阅读 · 0 评论 -
C++ STL set map 学习
由于工作需要,有一批数据,数据包含类型和工资两种属性。需求是找到某个类型的数据,并且是有序的。因此想到了map >。直接上代码:#include #include #include using namespace std;struct StruSalaryInfo{int salary;StruSalaryInfo(){salary =原创 2017-04-19 00:07:02 · 255 阅读 · 0 评论 -
C++ 字符串分割 split
C++ 字符串分割 split原创 2017-02-20 23:52:24 · 1658 阅读 · 0 评论 -
Linux查看一个进程内线程详情
Linux 查看一个进程中线程的状态方法一:PS在ps命令中,“-T”选项可以开启线程查看。下面的命令列出了由进程号为的进程创建的所有线程。1.$ ps -T -p 方法二: Top1.$ top -H2.要让top输出某个特定进程并检查该进程内运行的线程状况:$ top -H -p原创 2016-12-16 11:26:50 · 5045 阅读 · 0 评论 -
C rand 和 srand 函数
rand函数不是真正的随机数生成器,而srand()会设置供rand()使用的随机数种子。如果你在第一次调用rand()之前没有调用srand(),那么系统会为你自动调用srand()。而使用同种子相同的数调用 rand()会导致相同的随机数序列被生成。srand((unsigned)time(NULL))则使用系统定时/计数器的值作为随机种子。每个种子对应一组根据算法预先生成的随机数原创 2016-10-29 22:59:20 · 372 阅读 · 0 评论 -
Linux C++ 时间格式化
/************************************************************************* > File Name: time.cpp > Author: chenhui > Mail: ********* > Created Time: 2016年03月10日 11:20:58 ********原创 2016-10-17 15:47:16 · 2076 阅读 · 0 评论