muduo源码剖析 - worker线程池剖析 1、ThreadPool的成员变量: /* 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。 但是,有些时候,我们需要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被mutalbe来修饰。 */ mutable MutexLock mutex_; Condition notEmpty_ GUARDED_BY(mutex_); //GUARDED_BY, 由...守护 Condition n
C++ emplace_back 概述在C++11中,在引入右值的升级后,调用push_back变的更为高效,原本需要调用构造函数构造这个临时对象,然后调用拷贝构造函数将这个临时对象放入容器中。在C++11升级后,只需要调用构造函数,然后调用移动拷贝函数。就好比,现在手里有个面包,要把这个放到面包袋子里,原来的逻辑是,生产一个面包,然后在面包袋子里根据生产的面包再复制一个一摸一样的,在引入右值引用升级之后,现在的push_back的逻辑是,生产一个面包,然后把这个面包挪到袋子里(也就是移动拷贝)而不是再照着这个面包复制一个新的。
std::enable_shared_from_this使用场景 在很多场合,经常会遇到一种情况,如何安全的获取对象的this指针,一般来说我们不建议直接返回this指针,可以想象下有这么一种情况,返回的this指针保存在外部一个局部/全局变量,当对象已经被析构了,但是外部变量并不知道指针指向的对象已经被析构了,如果此时外部使用了这个指针就会发生程序奔溃。既要像指针操作对象一样,又能安全的析构对象,很自然就想到,智能指针就很合适!那么智能指针如何使用呢?现在我们来看一段代码。#include <iostream>#include <memor
验证当前机器是大端还是小端 方法一 int data = 0x12345678; char *cp = (char*)&data; //取4字节中的低地址字节 if(*cp == 0x78) cout << "little" << endl; if(*cp == 0x12) cout << "big" << endl;
QT客户端框架(http + websocket+QML) 本框架是在个人在做项目中总结出来的一套Qt客户端框架,基于http调用接口和websocket接收服务器通知,前端使用qml。 其中业务请求逻辑使用的是C++逻辑。为了后期方便使用,特此记录下来方便以后客户端的搭建。框架简介:1.本框架采用Qml写前端页面,页面逻辑使用JS, 请求接收逻辑采用C++。2.事件中转单例,qml和C++可同时开发,通过事件中转隔离前端和逻辑。3. 基本配置文件类和全局变量类和调试类使得开发业务更加方便。4.C++多线程部分亲测没问题。业务请求和接收全部在自己