编程语言
文章平均质量分 73
lqw198421
这个作者很懒,什么都没留下…
展开
-
当 std::bind 遇上 this
背景阅读公司之前项目的代码,看到一段代码如下: if (!m_api->SubFutureL1( m_config.config.symbol[0].future, std::bind( &ArbitrageFc::OnSymbol1FutureMd, this,原创 2021-03-22 18:01:03 · 6225 阅读 · 2 评论 -
C++11 condition_variable 粗浅使用
背景TCP回包过滤项目中,由于接收线程和多个解析线程(每个TCP连接对应一个解析线程)都是在不停的轮询,所以占用CPU很高。文龙建议使用CV来确保有数据的时候再去解析,以减少CPU的占用率;CV之前只是听过,从未在实际开发中使用过,在此做个简单记录;使用首先介绍一下condition_variable;1、它是在C++11才支持的,所以编译的时候,需要添加 -std=c++11 (或更高版本)的编译选项;2、它一般是跟mutex(一般用unique_lock)绑定使用的;3、涉及到的主要接口函原创 2021-03-04 19:42:11 · 180 阅读 · 1 评论 -
Linux下的md5的实现
背景当前项目中基于raw socket实现了tcp包的过滤,其中的过滤条件是我司的产品编号,为了防止甲方爸爸随意乱用我们的产品,所以需要对配置文件里的产品编号进行加密,简单起见,使用md5来进行加密;md5sum使用linux下使用md5非常简单:md5sum filename即可:[root@09de35f53b68 exch_rsp_filter_1]# md5sum MD5.cpp cde2e31dc14220ce250f3ebb906f8d18 MD5.cpp关于linux下md5原创 2021-03-01 16:25:07 · 588 阅读 · 0 评论 -
关于c/c++中volatile的理解
背景昨天新公司有同事分享了一个关于线程调度的主题,其中的一个细节谈到多线程下的共享变量的访问问题。有一个同事说,两个或多个线程对同一个线程都能访问的变量之所以不符合预期(比如说有2个线程,每个线程都对同一个全局变量进行++操作10000次,那么最终结果不一定是20000),是因为数据缓存在cache,而线程做++操作时,不是从内存中读取,而是从cache中读取导致的。我不认可他的说法,我认为根本原因是++操作不是原子操作,不能保证做了一个小测试。测试直接看代码:#include <stdio原创 2021-01-22 09:40:15 · 170 阅读 · 0 评论 -
C++ =delete的使用
背景今天看公司的编程规范,其中有个原则:如果你的类不需要拷贝/移动操作,请显式的通过在public域中(private本身就是不能显式的直接调用的)使用 =delete 或其他手段禁用之;对其中的 =delete不了解,之前没用过,查了一下以此为记;=delete使用方式C++11中=delete的巧妙用法#include <cstdio>class TestClass{public: int func(int data)=delete;};那么如果使用时:i原创 2021-01-20 17:56:54 · 7526 阅读 · 3 评论 -
C++对象内存模型初探
前言周末看资料的时候,看到虚继承和虚函数(两者完全不是一码事,正在写一个简单的总结),进一步看到C++的类对象的内存模型,网上已有很多文章,自己也记录一下。简单模式研究问题从简单入手,一步步深入。我们先来看一个最简单的模式;class A{public:int a;};用测试程序可以发现,A的对象的大小是4字节,也就是a(int类型)的大小;继承:class E :public A { public: int e; };此时E的对原创 2020-11-16 23:34:29 · 117 阅读 · 0 评论 -
C语言字符串操作总结大全(超详细)【转载】
1)字符串操作strcpy(p, p1) 复制字符串strncpy(p, p1, n) 复制指定长度字符串strcat(p, p1) 附加字符串strncat(p, p1, n) 附加指定长度字符串strlen(p) 取字符串长度strcmp(p, p1) 比较字符串strcasecmp忽略大小写比较字符串strncmp(p, p1, n) 比较指定长度字符串strchr(p, c) 在字符串中查找指定字符strrchr(p, c) 在字符串中反向查找strstr(p, p1) 查找字转载 2020-07-16 19:51:15 · 3586 阅读 · 0 评论 -
g++编译so里调用外部so
背景要给甲方爸爸A演示一下公司的产品,但是我们公司的产品,最终都是要跟爸爸们的产品结合在一起的,等于说要把甲方爸爸的代码抽出来编译成一个so,供我们的产品的java代码来调用——这本来是个很常见的场景——但是问题在于,甲方爸爸的这些代码,是在它的另一个乙方儿子上的so的基础上完成的,那么场景就变成了如下:之前没有自己搞过这样的逻辑,趁此机会,尝试一下,以此为记;尝试PS:因为自己一直做的是C(也会有C++)的开发,所以当前的demo演示里,我们来调用甲方爸爸的so时,用C的程序来代替Java的程序原创 2020-07-07 16:29:10 · 4201 阅读 · 0 评论 -
python调用face++接口,实现图像识别
@[TOC](python调用face++接口,实现图像识别)#需求##需要识别的图片在本地,通过python调用face++的接口,实现图像识别,并读取识别后的返回结果#具体实现##参考链接https://www.faceplusplus.com.cn/general-text-recognition/首先需要注册,注册后可以得到属于你注册账户的key和secret,这个会被用于后续的组包##实现代码可以参考:https://console.faceplusplus.c原创 2020-05-17 22:49:36 · 533 阅读 · 0 评论 -
dlopen_mode load so失败的可能原因
今天测试一个用例,其实不能说是测试,因为前面都已经完成了,只是需要支持一些新的功能,所以需要在当前版本上进行相应的修改然后测试。简单来说,还是plt hook的实现,只不过前一段时间针对的都是java编写的目标程序,现在针对的是c编写的目标程序(c编写的目标程序的功能早就验证过了)。本来以为是一个很轻松的事情,结果添加新功能的代码后,凉凉,根本找不到注入的函数,不应该啊,因为c编写的目标程序应该是最没有问题的。通过查看线程的maps信息,发现so注入都没有成功,再通过log查看,调用dlopen_mod原创 2020-05-11 21:42:35 · 1276 阅读 · 0 评论 -
c/c++中,*与++的优先级
今天看openj9的源码,看到一句代码,如下:data = *cursor++;当时稍微有点奇怪,为啥要这么写,为何不用()对其进行明确以提高代码阅读性?另外就是自己想了一下,这句话的意义是啥?首先想到的是优先级,个人理解,*和++在c c++中,应该是++的优先级更高,查了一下,结果如下:那么感觉结果应该是先++,后*,自己写了个简单代码进行测试,代码如下:int m...原创 2019-12-10 16:30:39 · 7889 阅读 · 0 评论