![](https://img-blog.csdnimg.cn/20190927151026427.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
codehub
积累一些常用的函数
xiaonuo911teamo
做一个简单的人。
展开
-
控制日志输出频率(C++)
通常我们在一段循环执行的代码内,要添加输出日志,通常我们还要控制一下输出频率,这里将其通过define进行代码简化。代码实现#define TIME_LIMIT_EXEC(interval) \ static uint64_t __last_time = 0;\ uint64_t __time = AppUtil::get_current_ms();\ bool do_exec = false;\ if .原创 2021-04-24 11:42:47 · 1107 阅读 · 0 评论 -
使用define定义函数(假定义)
有时我们想简化书写,但是这部分操作无法封装成函数,可以使用define进行封装。define定义在下面的define定义中,#topic 可以直接引用传入参数topic。而##name 可以放在调用的函数名中使用,这是我们正常的函数定义中,不方便实现的。#define REGISTER_DIAG_EVENT(topic, name) {\ Diagnose::register_diag_action(#topic, \ [ = ]() { \ .原创 2021-03-22 16:47:14 · 1351 阅读 · 0 评论 -
代码模拟电平触发方式(C++)
在电子电路基础中,触发方式有几种,包括高电平触发,低电平触发,上升沿触发,下降沿触发。在本文中将使用代码实现这几种方式。其中 message/messager.hpp 中使用的消息传递方式,在另一篇文章中有所介绍。https://blog.csdn.net/xiaonuo911teamo/article/details/112044036文章目录应用场景使用方式源码附件(就是上面引用的message.h)具体的例子应用场景想要以一种规律,触发一个事件,并且这种规律最终可以转化为上述的触发方式。.原创 2021-03-21 15:37:12 · 773 阅读 · 0 评论 -
计算算法运行时间巧妙方法
在写程序时,特别是执行算法步骤时,经常需要记录某段代码的执行时间。今天发现一个比之前写的更好的方法,所以在这里记录一下。之前自己写的:https://blog.csdn.net/xiaonuo911teamo/article/details/110037590实现思路和特点思路:利用类的构造,记录开始时间点,利用类的析构,记录结束时间点,并完成输出。特点:使用方便,封装度高。头文件就一个TimerCounter。构造参数flag,就是要记录时间部分的名字。构造参数enable_cout,表.原创 2021-01-15 18:37:21 · 971 阅读 · 0 评论 -
线程安全变量封装(C++)
在写使用多线程的项目的时候,经常需要给一个变量加锁保护。这里提供一个对需要加锁的变量使用的封装格式。这里提供普通变量以及std::vector和std::deque两个标准库的封装格式。其他的结构也是相似原理。使用方式 DoubleBufferData<int> data; data = 7; int m = data; std::cout << m << std::endl;单独变量封装#pragma once#include.原创 2020-12-31 19:28:47 · 642 阅读 · 2 评论 -
C++静态内存共享(常用于多个模块建的解耦合)
同一个程序的静态堆栈空间(static、全局变量所存放的位置)只有一个,所以我们可以利用这块空间进行不同so中的操作。比如,一个so负责声明,另一个so负责实现,而且不需要直接相互包含。下面给出一个例子,我会给出文件目录、所有文件内容以及编译脚本。其中clang++可以换成g++,版本需要支持c++17。目录结构-- helloworld -- libFuncImpl -- FuncImpl.h -- FuncImpl.cpp -- libFuncDecl -- FuncDecl..原创 2020-12-31 18:53:38 · 356 阅读 · 0 评论 -
std::regex匹配正则表达式C++11
C++11中引入的这个正则表达式解析的还是挺好用的。代码unpack_call 的目的是将input拆分出name和value的值。这个例子没什么用,就看看效果就好例子:name: hello ; value: world打印输出:name: hello ; value: worldhelloworld#include <regex>static bool diag_call(const std::string& input){ // s 是匹配空格.原创 2020-12-24 21:02:19 · 914 阅读 · 1 评论 -
类型安全转换汇总(C++)
平时在进行类型转换时,特别是从字符串转换为数字时,都要考虑安全问题。既不能默许,又应该及时发现处理,于是,自己写了安全的封装。正文static int32_t bool_to_int(const bool b)原创 2020-12-21 17:41:04 · 456 阅读 · 0 评论 -
C++级联Builder实现方式1
太简单的我就不记录了,下面的方式感觉封装效果非常好,可以视情况使用。摘选自Design Patterns in Modern C++ 一书中。类图表示源码#include <...>class PersonBuilder;class PersonAddressBuilder;class PersonJobBuilder;class Person{ // address std::string street_address, post_code, city; /.原创 2020-12-11 02:29:11 · 384 阅读 · 0 评论 -
C++日常用的函数总结
windows API 部分检查一个目录是否存在#ifdef UNICODEstatic bool isExistDir(const std::wstring& dir){ WIN32_FIND_DATA FindFileData;#elsestatic bool isExistDir(const std::string& dir) WIN32_FIND_DA...原创 2020-04-10 17:43:38 · 979 阅读 · 0 评论 -
遍历目录下的所有文件
#include <dirent.h>#include <string.h>#include <iostream>#include <vector>#include <string>namespace {void Usage(const char* exe){ fprintf(stderr, "input params error, run this exe as following command line:\n"); fp原创 2020-12-09 02:31:36 · 474 阅读 · 0 评论 -
C++新特性(C++11, C++14, C++17, C++20)
作为使用的记录,方便后续的查询,欢迎大家一起来完善。我会定期根据使用频率调整顺序。大部分说明,都会出自C++reference,cppreference网站std::chrono::duration从C++11就有,14有强大的补充。下面列举我喜欢用的。#include <chrono>#include <iostream>int main(){ using namespace std::chrono_literals; auto halfmin = 30s.原创 2020-11-17 02:06:08 · 1867 阅读 · 0 评论 -
并发编程-信号量
此文作为笔记,记录代码片段。说明Semaphore 构造函数,count表示最多几个线程同时运行。Wait 等待可执行线程出现Signal 已准备好,请求执行代码片段class Semaphore {public: Semaphore(long count = 0) : count_(count) { } void Signal() { std::unique_lock<std::mutex> lock(mutex_); ++count_; //lo.原创 2020-10-31 20:52:00 · 163 阅读 · 0 评论 -
遍历删除vector中的元素(出自Stackoverflow,正统的stl方法)
本来是个很简单的遍历删除的问题,但是因为vector的机制,在连续释放空间时,会导致出错。自己思考无非是倒序删除,或者使用earse的返回值,感觉都有些别扭,不是我想要的精巧。所以打算在网上搜个精巧简短的代码直接用。找来找去,终于在Stack overflow上找到了这段代码,实测很好用,正是我想找的。代码满足Condition()的元素会被删除。Execution() 释放Deferred资源。const auto pred = [](Deferred& d){ return !d.Co.原创 2020-09-13 23:38:20 · 504 阅读 · 0 评论 -
单实例运行方法(windows版)
一般情况下,我们正常编译出来的程序,都可以同时打开多次。在有些情况下,我们只能允许一台电脑打开一个我们的程序。此时我们可以使用下面这个方法。// demo.cppBOOL CheckSingleInstance(LPCTSTR pszUniqueName) { HANDLE hMutex = CreateEvent(NULL, TRUE, FALSE, pszUniqueName); DWORD dwLstErr = GetLastError(); BOOL bOneInstanceCheck.原创 2020-08-02 23:40:59 · 437 阅读 · 0 评论 -
打印崩溃时的堆栈信息(logger方式)C++
在开发C++程序时,特别是程序还没有特别稳定的时间段,在给测试人员测试时,有清晰的日志,会有效帮助我们定位到问题,而像崩溃这种较大的问题,有时会让人摸不到头脑。不能像在调试时一样,看到崩溃时的堆栈信息,而此时,又难以复现时,就不是很方便了。我就遇到这样的问题,然后在github上找到了打印崩溃时堆栈信息的方法,然后结合自己常使用的logger输出方式,整合修改了一下。我上传到了git,https://github.com/xiaonuo911teamo/BaseException。...原创 2020-08-02 23:34:59 · 1466 阅读 · 0 评论