C/C++
文章平均质量分 61
c/c++基础知识
fifbro
这个作者很懒,什么都没留下…
展开
-
C++成员函数指针转C-Style普通函数指针
【代码】C++成员函数指针转C-Style普通函数指针。原创 2022-09-28 15:14:31 · 1924 阅读 · 0 评论 -
打包发布qt+python软件
最近开发了一款可视化软件平台,初次接触Qt,在这里简单记录一下软件(Qt+Python)的打包过程。对于qt的依赖库,qt提供了windeployqt.exe来进行打包原创 2021-06-03 13:16:43 · 1647 阅读 · 2 评论 -
c++中嵌入python
在vs环境下的C++中引入Python的步骤:https://blog.csdn.net/weixin_34088598/article/details/92178672在C++中使用Python进行编程的详细代码:https://blog.csdn.net/steve_cui/article/details/88531568http://www.cppblog.com/jacky2019/archive/2007/05/17/24276.html...原创 2021-03-26 19:11:37 · 210 阅读 · 0 评论 -
C++ mutex和lock
mutex用来协助采取独占方式控制对资源的并发访问,这里的资源可能是一个对象,或多个对象的组合,为了获得独占式的资源访问能力,相应的线程必须锁定mutex,这样可以防止其它线程也锁定该mutex。下面两条线程如果没有使用mutex来同步,则输出结果会是112233。mutex g_mutex;void print123() { g_mutex.lock(); for (int i = 0; i < 3; i++) { this_thread::sleep_for(chrono:转载 2021-03-17 21:22:30 · 928 阅读 · 0 评论 -
c++并发编程之原子操作的实现原理
原子(atomic)本意是”不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为”不可被中断的一个或一系列操作”.处理器如何实现原子操作(1)使用总线锁保证原子性如果多个处理器同时对共享变量进行读写操作,那么共享变量就会被多个处理器同时进行操作,这样读写操作就不是原子的,操作完之后共享变量的值会和期望的不一致.所谓总线锁就是使用处理器提供的一个LOCK#信号,当一个处理器在总线上输出次信号时,其他处理器的请求将被阻塞住,那么该处理器可以独占共享内存.在x86.转载 2021-03-17 21:01:27 · 2178 阅读 · 0 评论 -
boost::unique_lock和boost::lock_guard的区别
lock_guardboost::mutex mutex; boost::lock_guard<boost::mutex> lock(mutex); unique_lockboost::mutex mutex; boost::unique_lock<boost::mutex> lock(mutex); std::unique_lock 与std::lock_guard都能实现自动加锁与解锁功能,但是std::unique_lock要比std::lock转载 2021-03-17 20:54:11 · 707 阅读 · 0 评论 -
c++并发编程之互斥锁(mutex)的使用方法
1. 多个线程访问同一资源时,为了保证数据的一致性,最简单的方式就是使用 mutex(互斥锁)。引用 cppreference 的介绍:The mutex class is a synchronization primitive that can be used to protect shared data from being simultaneously accessed by multiple threads.方法1:直接操作 mutex,即直接调用 mutex 的lock / unl.转载 2021-03-17 20:50:22 · 1683 阅读 · 0 评论 -
c++并发编程之创建线程
以boost为例。boost::thread有两个构造函数:(1)thread():构造一个表示当前执行线程的线程对象;(2)explicit thread(const boost::function0<void>& threadfunc): boost::function0<void>可以简单看为:一个无返回(返回void),无参数的函数。这里的函数也可以是类重载operator()构成的函数;该构造函数传入的是函数对象而并非是函数指针,这样一个具有一般...转载 2021-03-17 20:44:03 · 254 阅读 · 0 评论 -
c++并发编程之thread::join()和thread::detach()
thread::join():阻塞当前线程,直至*this所标识的线程完成其执行。*this所标识的线程的完成同步于从join()的成功返回。该方法简单暴力,主线程等待子进程期间什么都不能做。thread::join()会清理子线程相关的内存空间,此后thread object将不再和这个子线程相关了,即thread object不再joinable了,所以join对于一个子线程来说只可以被调用一次,为了实现更精细的线程等待机制,可以使用条件变量等机制。#include <ios...转载 2021-03-17 20:22:23 · 1294 阅读 · 0 评论 -
c++并发编程之线程的互斥与同步
什么是线程的同步与互斥?互斥:指在某一时刻指允许一个进程运行其中的程序片,具有排他性和唯一性。 对于线程A和线程B来讲,在同一时刻,只允许一个线程对临界资源进行操作,即当A进入临界区对资源操作时,B就必须等待;当A执行完,退出临界区后,B才能对临界资源进行操作。 同步:指的是在互斥的基础上,实现进程之间的有序访问。假设现有线程A和线程B,线程A需要往缓冲区写数据,线程B需要从缓冲区读数据,但他们之间存在一种制约关系,即当线程A写的时候,B不能来拿数据;B在拿数据的时候A不能往缓冲区写,也就是说,只.转载 2021-03-17 20:12:22 · 277 阅读 · 0 评论 -
ODBC连接字符串
转自:http://www.cnblogs.com/mattins/archive/2011/06/07/2074029.htmlaccess "Driver={microsoft access driver(*.mdb)};dbq=*.mdb;uid=admin;pwd=pass;"dBase "Driver={microsoft dbase driver(*.d转载 2017-12-09 10:12:49 · 1793 阅读 · 0 评论 -
三层架构
转自:百度百科三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一...转载 2018-02-28 17:32:36 · 390 阅读 · 0 评论 -
BS架构和CS架构
转自:百度百科B/S结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。B/S结构是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,...转载 2018-02-28 17:26:43 · 2483 阅读 · 0 评论 -
MPI知识点总结
MPI知识点总结点对点 阻塞式通信 MPI_Send MPI_Recv 非阻塞式通信 MPI_ISend MPI_IRecv MPI_Wait 同步聚合 栅栏同步 MPI_Barrier 通信聚合 广播 MPI_Bcast 分散 MPI_Scatter 收集 MPI_Gather 全部收集 MPI_Allgather 规约聚合 规约操作 MPI_Reduce MPI原创 2020-05-29 14:05:43 · 1505 阅读 · 0 评论 -
vs下安装配置使用mpi
安装和配置MPImpi的下载路径:https://www.microsoft.com/en-us/download/details.aspx?id=57467,两个文件都要安装(SDK和Bin),并记住路径。 在vs工程的项目属性页配置MPI(以我的项目为例): 选择所有配置,x64平台 “VC++目录”=>包含目录添加MPI头文件所在的路径:C:\Program Files (...原创 2020-05-02 17:57:42 · 4556 阅读 · 0 评论 -
开源C/C++网络库比较
在开源的C/C++网络库中, 常用的就那么几个, 在业界知名度最高的, 应该是ACE了, 不过是个重量级的大家伙, 轻量级的有libevent, libev, 还有 Boost的ASIO。ACE是一个大型的中间件产品,代码20万行左右,过于宏大,一堆的设计模式,架构了一层又一层,使用的时候, 要根据情况,看你从那一层来进行使用。支持跨平台。Boost的ASIO是一个异步IO库,封装了对Socket...转载 2018-04-13 12:11:24 · 702 阅读 · 0 评论 -
cereal库实现序列化和反序列化
cereal简介cereal是一个基于c++实现的序列化工具库,用于将c++的各种数据结构序列化成二进制流进行传输,并将二进制流反序列化成原来的数据结构。相比同用途库,cereal使用简单,仅需包含头文件,运行效率尚可,对比如下:cereal的下载和安装cereal的官方下载地址为:http://uscilab.github.io/cereal/index.html编译源码过程...原创 2020-04-25 11:01:57 · 6294 阅读 · 0 评论 -
在VS中使用OpenMP
OpenMP是由OpenMP Architecture Review Board牵头提出的,并已被广泛接受,用于共享内存并行系统的多处理器程序设计的一套指导性编译处理方案(Compiler Directive) 。OpenMP支持的编程语言包括C、C++和Fortran;而支持OpenMp的编译器包括Sun Compiler,GNU Compiler和Intel Compiler等。OpenMp...原创 2020-03-19 14:32:53 · 7512 阅读 · 5 评论 -
一文搞懂C语言回调函数
什么是回调函数我们先来看看百度百科是如何定义回调函数的:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。这段话比较长,也比较绕口。下面我通过一幅图来说明什么是回调:假设我们要使用一个...转载 2018-03-29 15:48:56 · 228 阅读 · 0 评论 -
值得推荐的C/C++框架和库,包含很多开源项目 (真的很强大)
程序员要站在巨人的肩膀上,C++拥有丰富的开源库,这里包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。转载 2017-11-29 19:18:32 · 5322 阅读 · 0 评论 -
Windows下编译excel开源库libxls的x86和x64版本,且支持中文
1、首先下载cygwin,32位操作系统下载setup-x86.exe,64位电脑下载setup-x86_64.exe。2、安装cygwin下的编译环境 x86操作系统安装以下组件: Devel下的make、mingw64-i686-binutils、mingw64-i686-gcc-core、mingw64-i686-gcc-g++、mingw64-i686-win-原创 2017-11-28 16:43:30 · 5851 阅读 · 13 评论 -
VS中区分Debug和Realease、x86和x64的宏定义
1.判断debug版本和release版本如果定义了_DEBUG表示debug版本,否则是release版本。2.判断x86版本和x64版本如果定义了_WIN64表示x64版本,否则是x86版本。在Win32配置下,_WIN32有定义,_WIN64无定义,在x86配置下,_WIN32和_WIN64都有定义。3.判断是否是Windows系统WIN32/_WIN32 可以用来判断是原创 2018-01-25 10:52:45 · 9461 阅读 · 0 评论 -
关于C语言feof()函数判断文件结尾的问题分析
相信很多C语言初学者都遇到过这种情况:使用while(!feof(fp)){ fscanf(...); //或者 //fread(...)}读文件时经常会重复读最后一段字符。实际上这并非feof()函数的bug,只是我们不了解feof()函数的性质。feof()的性质:只有当文件位置指针指向文件末尾,再发生读/写操作,然后再调用feof()时,才会得到...原创 2017-12-04 01:12:42 · 4711 阅读 · 0 评论 -
正则表达式简介及在C++11中的简单使用
正则表达式(regular expression)是计算机科学中的一个概念,又称规则表达式,通常简写为regex、regexp、RE、regexps、regexes、regexen。 正则表达式是一种文本模式。正则表达式是强大、便捷、高效的文本处理工具。正则表达式本身,加上如同一门袖珍编程语言的通用模式表示法(general pattern notation),赋予使用者描述和分析转载 2018-01-19 17:31:24 · 231 阅读 · 0 评论 -
c++中的typeid和typeof
1.typeidC++中的typeid是由C++标准库提供,定义于<typeinfo>头文件,用于判断某个变量的类型。用法如下:#include <typeinfo>#include <iostream>struct MyStruct{ int a; double b; char c;};int main(int argc, char * a...原创 2018-02-26 10:41:07 · 17831 阅读 · 0 评论 -
C语言运算符优先级表
优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右 ()圆括号(表达式)/函数名(形参表) .成员选择(对象)对象.成员名 ->成员选择(指针)对象指针->成员名 2-负号运算符-常量右到左单目运算符(类型)强制类型转换(数据类型)表达式 ++自增运算符++变量名/变量名++单目运算符--自减运算符--变量名/变量名--单目运算符*取值运算符*指针变量单...原创 2018-03-22 15:44:44 · 197 阅读 · 3 评论 -
c运行库、c标准库、windows API的区别和联系
C运行时库函数C运行时库函数是指C语言本身支持的一些基本函数,通常是汇编直接实现的。API函数API函数是操作系统为方便用户设计应用程序而提供的实现特定功能的函数,API函数也是C语言的函数实现的。区别他们之间区别是:API函数是针对操作系统的,C语言运行时库函数则是针对C语言本身的。·1、运行时库就是 C run-time library,是C而非C++语言世界的概念。 取这个名字就是因...转载 2018-03-30 11:31:11 · 268 阅读 · 0 评论 -
C++ 虚函数表解析
转自:陈皓前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这...转载 2018-03-29 15:09:10 · 223 阅读 · 0 评论 -
const关键字总结
const是一个C++语言的限定符,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。1. 修饰常量用const修饰的变量是不可变的,以下两种定义形式在本质上是一样的:const int a = 10;int const a = 10;2. 修饰指针如果const位于*的左侧...转载 2018-03-29 15:29:03 · 183 阅读 · 0 评论 -
static关键字总结
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。1.面向过程设计中的static1.1静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下: //Example 1#include <iostrea...转载 2018-03-29 15:31:52 · 172 阅读 · 0 评论 -
内存四区模型
内存四区模型 图1、内存四区模型流程说明1、操作系统把物理硬盘代码load到内存2、操作系统把c代码分成四个区3、操作系统找到main函数入口执行1、内存四区:一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap: ...转载 2018-03-29 15:34:29 · 346 阅读 · 0 评论