我的博文
我的开源项目
C:
libwebsockets(官方repo稍作改动)
zBuffer
C++:
个人通用开发工具库
基于libasound库音频播放
基于rostopic的服务调用封装
Qt:
Qt异步事件库
原文链接:
https://blog.csdn.net/oyoung_2012/article/details/102696213
安装libsdl2-mixer-dev
1 | ~$ sudo apt install libsdl2-mixer-dev |
1 | #include <SDL2/SDL.h> |
1 | set(CMAKE_CXX_FLAGS "-pthread ${CMAKE_CXX_FLAGS}") |
-> Mix_Init
-> Mix_OpenAudio
-> Mix_LoadMUS / Mix_LoadWAV
-> Mix_PlayMusic / Mix_FadeInMusic / Mix_PlayChanel / Mix_FadeInChannel
-> Others User Operations
-> Mix_HaltMusic / Mix_FadeOutMusic / Mix_HaltChannel / Mix_FaleOutChannel
-> Mix_CloseAudio
-> Mix_Quit
1 | #include <SDL2/SDL.h> |
控制台输出:
1 | [2019-10-23 10:30:55.443]-[info]- [Mix_Init] Mix initialize successfully (main.cc #32 main) |
原文链接:
https://blog.csdn.net/oyoung_2012/article/details/102619309
当需要拷贝多个文件并且需要保留源文件的目录树结构时, 如果源目录的文件比较纯净,没有其他相关的文件或目录时, 我们只需要执行
1 | ~$ #cp -r <源目录> <新目录> |
但是, 如果我们需要拷贝的文件所在的目录里包含了其他项目或程序的文件或目录, 那我们就不能这么干
比如,
我们可以新建一个文本文档, 里面把我们所关心的文件列出来
list.txt
1 | /etc/app/app.cnf |
这样我们就可以通过使用 cat list.txt 获取到我们的文件路径列表
此时我们只需要使用
1 | ~$ cp --parent $(cat list.txt) . |
就可以将列表里面的所有文件按照原有的目录树结构拷贝到当前目录(或者使用其他目录)
1 | ~$ find /opt/ros/ -name *.a |
然后, 嘿嘿
1 | ~$ cp --parent $(find /opt/ros -name *.a) . |
这不就都按照源目录结构拷贝到当前目录了嘛
1 | ~$ dpkg -L mysql-server-5.7 |
这个时候我们就可以…. -_- 嘿嘿嘿 , 你懂的
原文链接:
https://blog.csdn.net/oyoung_2012/article/details/101072215
cmake
1 | set(CMAKE_CXX_FLAGS "-g -lmysqlclient -pthread -lz -lm -lrt -ldl $CMAKE_CXX_FLAGS") |
g++ build
1 | g++ -o mysql -lmysqlclient -I/usr/include/mysql -L/usr/lib/x86_64-linux-gnu -pthread -lz -lm -lrt -ldl -g main.cc |
小提示:
示例代码中使用到了另外两个三方库
一个三方库时sspdlog, 日志库
#include <sspdlog/sspdlog.h> 可以替换成 <iostream>,
SSPD_LOG_INFO可以替换为std::cout,
SSPD_LOG_ERROR可以替换为std::cerr
另一个三方库 为 自己的 工具库 oyoungs/dispatch, 可以到github上下载
1 |
|
使用过swift开发过iOS应用的广大搬砖工都知道, 在swift语言里, 有一个很好用的关键字 defer
这个defer有什么用呢?
在某个函数或者代码块中, 如果使用了defer 添加了一段代码, 会发生什么呢?
哈哈, 当然是 在代码块结束时, 一定会调用这段代码了。
这样有什么好处呢?
我们知道, 有些操作需要很多步骤,其中一步出错,就可能需要是整个操作流程结束, 但是结束之前那些已经申请的资源怎么办呢? 如果不处理肯定会出现资源泄露的啊。这是defer就派上用场了,使用defer 之后, 在后面的代码块中去释放申请占用的资源, 就会保证在代码块结束之前一定会调用这个defer代码块来释放资源, 保证了一定的安全性
那作为一名C++开发者来说,有没有这个便利的工具呢?
老实说, 从原生C++角度来说, 是没有这个工具的,有点可惜! 那我们能不能自己实现呢?
1. defer 功能是退出代码块时必定会执行代码, C++里面有这种机制吗? 当然有啊, 局部对象的析构函数, 可行性 +1
2. defer 后面接的是代码块, C++11以后, 也有了lambda表达式的支持, 可行性再次 +1
3. defer 后面所接的代码块是不带括号尾部闭包格式, C++ 有什么方式可以以函数对象为参数且不需要括号就能调用的呢? 哈哈, 有, + - * / << >> += -= 等等操作符调用时不需要加括号, 可行性再次 +1不如我们就定义一个类叫Defer好了, 至于用哪个操作符呢? 凭自己喜好啊, 我这里使用了 += 表示往里头追加, 哈哈
1 | #include <vector> |
1 |
|
输出结果是不是预期的呢?
1 | new a |
哈哈, 还真是!! 功能实现了
这里的 defer 还能用在类中, 确保资源在类对象析构的时候能正确的释放资源
比如
1 |
|
预期结果
① 当文件不存在时:
1 | open file ./test.log |
② 当文件存在时:
1 | open file ./test.log |