C++
qw_stone
文不能测字,武不能防身
展开
-
python调用dll
原因:由于涉及到通过python进行我们自己的dll调用,故查看了一下python关于dll的调用流程在此记录。概述:目前验证python只能调用c风格的接口,我们常规的类方法是不能直接调用的,如果需要调用,则可以通过再次将类方法导出即可。关于dll接口的导出我们涉及到两种定义格式,stdcall和cdecl两种,不同的导出约定python对应不同的调用方法。二者区别在此不进行阐述,简单的调用逻辑如下:首先定义一个dll如下extern "C" __declspec(dllexport) in原创 2020-10-14 21:32:25 · 1001 阅读 · 0 评论 -
SigSlot介绍
原因:由于webrtc中模块之间信息交互使用到sigslot库,故在此记录一下概述:A模块声明sigslot::signal模板方法,B模块实现对应的方法,通过connet进行关联,从而实现跨模块调用,减少了类指针的传递。模块之间相互调用一般使用继承相同接口,通过接口对象进行模块传递,从而实现跨模块调用,但是当接口方法比较多时这样会变得冗余,且当接口修改时各个模块都要进行编译修改。所以通过...原创 2020-04-22 18:39:47 · 414 阅读 · 0 评论 -
static_cast和dynamic_cast和reinterpret_cast和const_cast
说明:记录一下强制类型转换的关键字概况:static_cast定义类型:static_cast<new_type>(expression).new_type为目标类型,expression为原始数据类型变量或者表达式。用于强制类型转换。编译时检查,运行时不能保证转换的安全性。主要使用情况:1:基类与派生类之间类型转换,2:常规类型之间转换。注意事项:关于const的转换。...原创 2019-12-09 21:48:34 · 490 阅读 · 0 评论 -
unique_ptr
原因:介绍一下unique_ptr的使用说明概况:介绍:unique_ptr包含在memory头文件中,通过一个指针占用和管理一块内存。并在unique_ptr的作用域退出时释放改内存。主要定义方式如下两种:可以看出第一种释放函数为自带的delete操作符,而第二种情况为我们自己定义的释放函数。template<class T, class Deleter = std::d...原创 2019-12-05 20:55:47 · 86 阅读 · 0 评论 -
C++11 condition_variable
原因:记录一下条件变量的内部流程概况:通过条件变量实现线程间同步。伪代码如下:需要和锁配合使用,用到了unique_lock实现互斥。具体流程如下:线程a:1:首先利用unique_lock加锁。2:调用condition_variable的wait方法进行阻塞等待条件满足。wait内部流程首先进行unique_lock解锁,然后判断第二个参数是否为ture,如果为true则...原创 2019-12-04 13:28:12 · 161 阅读 · 0 评论 -
C++11 bind
原因:记录一下新特性bind函数:头文件<functionnal>,可将bind函数看作是一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象,一般形式如下:arg_list是参数列表,_n表示占位符(n是一个整数),用于表示参数顺序。通过不同的参数顺序可以实现参数的从新排序。而且当bind时指定了参数值,则再次调用传参则无效。auto newCallabl...原创 2019-12-03 23:06:56 · 129 阅读 · 0 评论 -
类创建堆上和栈上实现
原因:如何在堆上和栈上创建类概况:普通的局部变量声明被创建在栈上,如A a;而通过new进行创建的类对象则被分配到堆上如A *a = new A;类只在堆上创建,只需要将析构函数设置为private类型即可如下:编译器在为类对象分配空间时会检查析构函数的访问性。class TeC {private: ~TeC() {};public: void Test() { printf...原创 2019-12-03 22:42:12 · 348 阅读 · 0 评论 -
c++11 thread使用介绍
原因:c11里面的thread用法,故在此进行梳理一下概况:通过类内调用与跨类进行调用进行代码分析。首先分析一下thread头文件:explicit thread(_Fn&& _Fx, _Args&&... _Ax)thread(thread&& _Other) _NOEXCEPTbool joinable() //判断线程声明...原创 2019-11-29 17:03:42 · 771 阅读 · 0 评论 -
memory_order介绍
原因:查看Oboe源码,发现内部使用到std::atomic。故在此记录一下memory_order的理解概况:通过不同的memory_order实现线程同步介绍:线程间同步常规用法是通过互斥锁实现,但是在对性能要求实时性高的情况选,该方法不可取,故需要无锁编程,而无锁编程核心就是原子操作。针对C11提出的Atomic operations library(原子操作库)memory_ord...原创 2019-11-27 18:50:19 · 1144 阅读 · 0 评论 -
libcurl实现http交互
原因:由于涉及到使用libcurl进行http交互,故在此进行记录调用流程概况:利用curl模块实现http请求http介绍:(hyperText Transfer Protocol超文本传输协议)定义在应用层,底层基于TCP/IP协议,且是一个无状态的协议,永远都是客户端发起请求,服务器响应。http消息由客户端到服务器的请求和服务器到客户端响应组成。请求消息和响应消息都是由开始行(对于...原创 2019-11-26 10:42:04 · 1283 阅读 · 0 评论 -
预处理编译汇编链接
原因:今天生成工程文件时突然发现有些细节忘却,故在此做一记录概况:编译过程就是把文本形式源代码翻译成机器语言形式的目标文件的过程,链接过程就是把目标文件和用到的库文件进行组织形成最终可执行代码的过程。编译过程分为:编译和汇编,而编译又可以分为预处理阶段和编译阶段。预处理阶段:将根据已放置在文件中的预处理指令来修改源文件的内容,比如#include指令,它把头文件的内容添加到cpp...原创 2019-11-04 18:22:04 · 323 阅读 · 0 评论