- 博客(151)
- 资源 (1)
- 收藏
- 关注
原创 muduo源码剖析 - worker线程池剖析
1、ThreadPool的成员变量: /* 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。 但是,有些时候,我们需要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被mutalbe来修饰。 */ mutable MutexLock mutex_; Condition notEmpty_ GUARDED_BY(mutex_); //GUARDED_BY, 由...守护 Condition n
2022-05-23 11:15:34
291
原创 C++ emplace_back
概述在C++11中,在引入右值的升级后,调用push_back变的更为高效,原本需要调用构造函数构造这个临时对象,然后调用拷贝构造函数将这个临时对象放入容器中。在C++11升级后,只需要调用构造函数,然后调用移动拷贝函数。就好比,现在手里有个面包,要把这个放到面包袋子里,原来的逻辑是,生产一个面包,然后在面包袋子里根据生产的面包再复制一个一摸一样的,在引入右值引用升级之后,现在的push_back的逻辑是,生产一个面包,然后把这个面包挪到袋子里(也就是移动拷贝)而不是再照着这个面包复制一个新的。
2021-11-15 16:07:12
5124
原创 std::enable_shared_from_this使用场景
在很多场合,经常会遇到一种情况,如何安全的获取对象的this指针,一般来说我们不建议直接返回this指针,可以想象下有这么一种情况,返回的this指针保存在外部一个局部/全局变量,当对象已经被析构了,但是外部变量并不知道指针指向的对象已经被析构了,如果此时外部使用了这个指针就会发生程序奔溃。既要像指针操作对象一样,又能安全的析构对象,很自然就想到,智能指针就很合适!那么智能指针如何使用呢?现在我们来看一段代码。#include <iostream>#include <memor
2021-11-01 10:39:33
425
原创 验证当前机器是大端还是小端
方法一 int data = 0x12345678; char *cp = (char*)&data; //取4字节中的低地址字节 if(*cp == 0x78) cout << "little" << endl; if(*cp == 0x12) cout << "big" << endl;
2021-09-27 11:48:56
110
原创 QT客户端框架(http + websocket+QML)
本框架是在个人在做项目中总结出来的一套Qt客户端框架,基于http调用接口和websocket接收服务器通知,前端使用qml。 其中业务请求逻辑使用的是C++逻辑。为了后期方便使用,特此记录下来方便以后客户端的搭建。框架简介:1.本框架采用Qml写前端页面,页面逻辑使用JS, 请求接收逻辑采用C++。2.事件中转单例,qml和C++可同时开发,通过事件中转隔离前端和逻辑。3. 基本配置文件类和全局变量类和调试类使得开发业务更加方便。4.C++多线程部分亲测没问题。业务请求和接收全部在自己
2021-09-13 10:37:29
3092
原创 智能指针详解
一、简介由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法。包括:std::auto_ptr、boost::scoped_ptr、boost::shared_ptr、boost::scoped_array、boost::shared_array、boost::wea
2021-09-09 22:13:28
1594
原创 pro文件找不到自己编译的Qt模块和库
背景:编译完QTAV,并且拷贝了库、模块、头文件到Qt安装目录下。但是测试时出现了问题QT无法识别到这两个模块解决办法:
2021-06-15 15:27:18
523
原创 ffmpeg解封装解码
#define __STDC_CONSTANT_MACROS//Windowsextern "C"{ #include <libavutil/imgutils.h> #include <libavutil/samplefmt.h> #include <libavutil/timestamp.h> #include <libavformat/avformat.h>};#define __STDC_CONSTANT_MA.
2021-06-02 10:33:20
455
转载 ffmpeg音频的基本概念
1. 采样率 采样设备每秒抽取样本的次数2.音频格式及量化精度(位宽) 每种音频格式有不同的量化精度(位宽),位数越多,表示值就越精确,声音表现自然就越精准。FFMpeg中音频格式有以下几种,每种格式有其占用的字节数信息:正在上传…重新上传取消enum AVSampleFormat { AV_SAMPLE_FMT_NONE = -1, AV_SAMPLE_FMT_U8, ///< unsigned 8 bits AV_SAM...
2021-05-31 19:40:02
435
原创 OpenCV拉流显示和保存
#include <QCoreApplication>#include <opencv2\opencv.hpp>#include <iostream>#include <QDebug>using namespace std;using namespace cv;#define qdebug qDebug()<<"["<<__FILE__<<":"<<__LINE__<<"]"<&
2021-05-22 14:25:59
1095
1
转载 Mysql初始化密码错误 Ubuntu16.04 ERROR 1698 (28000): Access denied for user ‘root‘@‘localhost‘ 解决流程
https://www.cnblogs.com/py1612919884/p/9327015.html添加链接描述
2021-05-11 20:04:31
208
原创 C++17之for循环新能力
遍历map容器#include <map>#include <iostream>using namespace std;map<string, int> map;map["Apple"] = 10;/* key为string类型,value为int类型 */for (auto [key, value] : map) { cout << key << " " << value << endl;}.
2021-05-10 16:25:14
1373
原创 更换Ubuntu软件源
由于Ubuntu官方软件源太慢了,换回国内的软件源这样快很多。1. 备份源配置文件sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak2. 修改配置文件sudo gedit /etc/apt/sources.list覆盖sources.list配置文件的内容:#清华大学软件源deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe m
2021-05-10 15:58:19
165
原创 Qt连接MySql数据库(本地和远程数据库均可)
两种方法:一、自己编译Qt 的MySQL数据库驱动插件。二、使用QDBC设置mysql为数据源库(推荐)方法二1. 添加ODBC数据源,在控制面板中找到管理工具,其中有ODBC数据源 64位的,打开后添加2 . 如果数据源没有Mysql,需要安装mysql的ODBC驱动程序http://dev.mysql.com/downloads/connector/odbc/5.1.html3. 选择 unicode的编码格式.MYSQL Connector/ODBC 提供了两个版本,一个是 ANS
2021-05-09 17:34:14
8113
4
转载 QtHttpServer的使用
https://blog.csdn.net/MrTsai_cpp/article/details/116114884?spm=1001.2014.3001.5501
2021-04-26 13:52:24
811
原创 Qt服务器程序打包后TLS初始化失败
提示错误:qt.network.ssl: QSslSocket::startServerEncryption: TLS initialization failed出问题时的环境: 服务器部署在新windows10,什么环境都莫得。分析原因: 打眼一看就是openssl没安装出问题的。直接解决方法:新windows10安装Openssl即可[http://slproweb.com/products/Win32OpenSSL.html] (http://slproweb.com/products/Wi
2021-04-22 21:08:25
1230
转载 Qt项目通用类-----------常用控件Qss
qsshelper.h#ifndef QSSHELPER_H#define QSSHELPER_H#include <QObject>#include <QPushButton>#include <QLineEdit>#include <QProgressBar>#include <QSlider>#include <QRadioButton>class QssHelper : public QObject{
2021-04-20 19:54:27
282
原创 Qt项目通用类----------调试类
之前:qDebug()等调试信息。 缺点:没有行号和函数名等调试当项目调试输出特别多时,容易混乱 不知道是那里输出的调试信息。现在:将行号,文件名,函数名,组合一体之后再输出信息。一目了然就能知道此信息在哪里输出。debughelper.h#ifndef COMMONHELPER_H#define COMMONHELPER_H#include <QFile>#include <QDebug>//调试所用宏#define xdebug (QDebug(QtDebu
2021-04-20 13:06:36
168
原创 Qt项目通用类----------消息对话框类
messagedialoghelper.h#ifndef MESSAGEDIALOGHELPER_H#define MESSAGEDIALOGHELPER_H#include <QObject>#include <QTableView>#include <QInputDialog>#include <QDate>class MessageDialogHelper : public QObject{ Q_OBJECTpublic:
2021-04-20 12:53:19
218
原创 Qt项目通用类----------网络工具类
networkhelper.h#ifndef NETWORKHELPER_H#define NETWORKHELPER_H#include <QObject>class NetWorkHelper : public QObject{ Q_OBJECTpublic: explicit NetWorkHelper(QObject *parent = nullptr); //判断IP地址及端口是否在线 static bool ipLive(const Q
2021-04-16 12:13:07
233
转载 QEventLoop 的使用
QEventLoopQt介绍:At any time, you can create a QEventLoop object and call exec() on it to start a local event loop. From within the event loop, calling exit() will force exec() to return.在任何时候,你都可以创建一个QEventLoop的对象,然后调用它的exec() 来开始一个局部的事件循环。然而并看不懂什么意思和
2021-04-15 16:43:42
789
原创 Qt项目通用类----------文件Dialog操作
QFileHelper.h#ifndef QFileHelper_H#define QFileHelper_H#include <QObject>#include <QGuiApplication>class QFileHelper : public QObject{ Q_OBJECTpublic: explicit QFileHelper(QObject *parent = nullptr); //获取准备保存的文件 stati
2021-04-15 15:48:28
329
原创 推荐的Qt论坛+个人博客+网站
qtcn http://www.qtcn.org豆子的空间 https://www.devbean.netyafeilinux http://www.qter.org一去二三里 http://blog.csdn.net/liang19890820乌托邦2号 http://blog.csdn.net/taiyang1987912foruok http://blog.csdn.net/foruokjason http://blog.csdn.net/wsj18808050朝十晚八 http://w
2021-04-14 11:07:55
3080
转载 interpret_cast nconst_cast static_cast dynamic_cast四种强制转化的区别
文章目录1.interpret_cast2.const_cast3.static_cast4.dynamic_cast1.interpret_cast几乎什么类型都可以转换,对结果没有保证。-> 不推荐使用2.const_cast一般用于 去const 类型转换3.static_cast基础数据类型转换,隐式转换,void*转任意指针,多态向上转换,向下不保证4.dynamic_cast只用于虚函数,也就是继承之间的上下转换,向上转换安全向下转换失败:a.对于指针,返回
2021-03-12 20:06:14
299
test0908.rar
2021-09-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人