自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

C++ Qt 开发藏经阁

寒江孤影,江湖故人,相逢何必曾相识

原创 C++调用Python

一 开发环境配置 先安装python, 自行百度。安装ok后,在安装目录会有python的C头文件,lib,dll, 这些在写C++程序时都会用到。 我用的是Python3.7,在VS2015中项目属性配置Python的头文件,库文件 (1)包含python的头文件:右键项目属性---...

2020-02-29 23:59:06 136 0

原创 ubuntu如何编写C++程序

一、使用vim编辑c++代码: vim hello.cpp 输入如下代码: #include <iostream> using namespace std; int main() { cout<<"Hello world!"<<...

2020-02-29 23:38:50 1420 0

原创 C++ string类对象占多少个字节?

测试环境VS2015 win10/64 示例代码 string name1 = "mike"; string name2 = "china shang hai"; int size1 = sizeof(name1); int size2 = s...

2020-02-29 23:25:01 183 0

原创 C++ explicit关键字详解

首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式). 那么显示声明的构造函数和隐式声明的有什么区...

2020-02-29 23:10:09 41 0

原创 VS2017 MFC无法添加对话框类,在如下位置找不到Default.js

初次使用MFC添加类时,无法添加,会有如下错误: 需要下载一个文件Simple, 将Simple文件夹复制到在MFC的安装目录,例如我的目录: D:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\ID...

2020-02-29 22:58:43 318 0

原创 MFC修改控件字体大小

主要用到CreateFont,函数声明如下: INGDIAPI HFONT WINAPI CreateFontA( _In_ int cHeight, //字体高度:0为默认高度,非0绝对值为字体高度 _In_ int...

2020-02-29 22:51:32 278 0

原创 MFC如何使菜单项变成灰色

菜单设置好后,在代码添加菜单 CMenu m_SysMenu; m_SysMenu.LoadMenu(IDR_SYSMENU); SetMenu(&m_SysMenu); 使用EnableMenuItem即可设置菜单的样式,颜色,第一个参数是菜单项ID,第二个参数是样式。 ...

2020-02-29 22:35:41 197 1

原创 Qt MFC混合编程详细介绍与代码示例

在用Qt做客户端时,如果项目突然需要用到一些COM,MFC dll等,这些玩意儿在Qt可能无法调用,又不想用MFC做界面,那么是否可以Qt, MFC一起使用呢? 这种解决方案是存在的,Qt是一套界面库,把Qt当做一套常规的SDK, 在MFC项目中包含Qt的头文件,lib,dll,这样就可以...

2020-02-29 20:40:50 727 0

原创 Qt sender()用法详解

sender()是QObject类的方法,声明如下: QObject *sender() const; Qt助手的解释如下: Returns a pointer to the object that sent the signal, if called in a slot ac...

2020-02-29 14:10:14 449 0

原创 C++ ffmpeg开发环境配置

本篇记录ffmpeg C++开发环境配置,我的环境:win10-64 ,VS2015,FFmpeg_4.2.1_win64 需要ffmpeg 4.2.1 win64开发包的可以去【ffmpeg官网】下载,或者点击点击如下百度网盘链接下载. 链接:https://pan.baidu.com/...

2020-02-28 13:09:32 556 0

原创 Qt qrc、rcc文件的使用

复制如下代码到img.qrc文件里保存 <!DOCTYPE RCC><RCC version="1.0"> <qresource> <file alias="LOGO">D:\\lo...

2020-02-27 16:18:31 597 0

原创 C++11多线程(十):packaged_task类的用法

std::packaged_task它包装了一可调用的目标(如function, lambda expression,bind expression, or another functionobject)以便异步调用,它和promise在某种程度上肴点像,promise保存了状态共享的值,而pac...

2020-02-23 16:48:36 115 0

原创 C++11多线程(九):promise用法详解

std::promise用来包装一个值将数据和future绑定起来,为获取线程函数的某个值获取便利,取值是间接通过promise内部提供的future来获取的。promise的主要目的是提供一个”Set”操作,和future的get()对应。 promise头文件如下 #include...

2020-02-23 16:32:55 296 0

原创 C++11多线程(八):future用法详解

C++ 11多线程不能直接从thread.join()获得想要的结果,必须定义一个变量,在线程执行时对这个变量赋值,然后执行join(), 过程比较复杂。 std::future可以从异步任务中获取结果,一般与std::async配合使用,std:async用于创建异步任务,实际上就是创...

2020-02-23 16:05:04 754 0

原创 C++11多线程(七):condition_variable条件变量

condition_variable条件变量提供了线程间的"等待"与“唤醒”机制,可用于多线程间同步。 condition_variable有5个函数: wait 阻塞自己,等待唤醒 wait_for 阻塞自己,等待唤醒,最多等指定的一段时间 w...

2020-02-23 01:08:06 110 0

原创 C++11多线程(六):std::unique_lock类的用法

unique_lock是个类模板,工作中,一般lock_guard(推荐使用), lock_guard取代了mutex的lock()和unlock(); unique_lock比lock_guard灵活很多,可以手动控mutex解锁,效率率上差一点,内存占用多一点。还是使用上一篇的代码,处理A线程...

2020-02-23 00:37:05 248 0

原创 C++11多线程(五):std::lock_guard类的用法

lock_guard类位于mutex头文件下,使用前需要包含如下语句: #include<mutex> usingnamespacestd; std::lock_guard类采用RAII手法管理某个锁对象,启动能是在对象构造时将mutex加锁,无需手动调用lock()方法...

2020-02-23 00:08:38 605 0

原创 C++11多线程(四):mutex的应用

C++ 11的 mutex 比windows的功能相对丰富,和 boost mutex 基本类似,C++11 mutex主要分为以下4种 std::mutex 基本mutex std::recursive_mutex 递归mutex,可以多重加锁解锁 std::timed_m...

2020-02-21 23:03:16 225 0

原创 C++11多线程(三):atomic与atomic_flag的使用与原理分析

C++11提供了线程的原子操作,这些在boost库中也有,在多个线程时原子操作保证了数据的安全性。C++11的原子操作主要是atomic和atomic_flag,使用时需要包含如下头文件: #include<atomic> 一.atmoic类的使用 template&l...

2020-02-21 22:11:16 1125 0

原创 C++11多线程(二):this_thread 名字空间

C++ 11的 std::this_thread名字实现了很多线程辅助函数,例如get_id(), yeild()等,this_thread代码如下: namespace this_thread { thread::id get_id() _NOEXCEPT; inline void yie...

2020-02-21 21:36:39 291 0

原创 C++11多线程(一):线程创建,等待,异步

C++11 新标准中引入了五个头文件来支持多线程编程,他们分别是<atomic> ,<thread>,<mutex>,<condition_variable>和<future>。简介如下: (1)<atomic>:该头文主要...

2020-02-20 14:03:20 727 0

原创 windows C++多线程(十三):多线程通信

windows提供了消息机制,在写多线程代码时可以用windows消息进行通信,比如线程A, B在执行时,可以相互发送消息,实现多线程通信。 自定义消息,必须大于 WM_USER, 例如定义一个TH_MSG消息: #define TH_MSG WM_USER+30...

2020-02-20 13:45:55 265 0

原创 windows C++多线程(十二):线程本地存储TLS(Thread Local Storage)

一、TLS简述和分类 我们知道在一个进程中,所有线程是共享同一个地址空间的。所以,如果一个变量是全局的或者是静态的,那么所有线程访问的是同一份,如果某一个线程对其进行了修改,也就会影响到其他所有的线程。不过我们可能并不希望这样,所以更多的推荐用基于堆栈的自动变量或函数参数来访问数据,因为...

2020-02-20 13:09:19 188 0

原创 windows C++多线程(十一):生产者消费者模型

说到多线程,有一个很经典的模型:生产者与消费者。例如一个仓库,假设装货量是一个常数N, 当前货物数为S, 把工厂当做生产者,销售是消费者。看下面几种情况: (1)0<S<N时,可以生产,也可以销售 (2)S>N,停止生产,货物装不下了,可以销售 (3)S=0, 无法销...

2020-02-15 20:03:55 424 0

原创 windows C++多线程(十):Windows事件Event的用法

事件(Event)是WIN32提供的最灵活的线程间同步方式,事件可以处于激发状态(signaled or true)或未激发状态(unsignal or false)。根据状态变迁方式的不同,事件可分为两类: (1)手动设置:这种对象只可能用程序手动设置,在需要该事件或者事件发生时,采用Set...

2020-02-15 19:20:48 472 0

原创 windows C++多线程(九):C++实现程序单实例运行

windows有一些程序是单实例的,比如'任务管理器',‘控制面板’等,而大部分程序是多实例运行的,比如QQ,微信,各种浏览器等。在项目开发时有时要求程序单实例运行,C++的实现途径很多,这里提供信号量和互斥量实现程序单例启动运行的方法。 (1)互斥量单例运行 /* 创...

2020-02-15 18:27:06 118 0

原创 windows C++多线程(八):互斥量mutex的使用

互斥量可以对相关资源代码进行保护,在多线程同步中用的很多。互斥量在MFC和Qt中都有封装好的类,win32中的mutex和MFC,Qt的mutex的使用略有不同。 win32的互斥量使用方法 (1)创建互斥量CreateMutex (2)等待事件通知WaitForSingleObjec...

2020-02-15 17:39:50 325 0

原创 windows C++多线程(七):信号量Semaphore的使用

信号量与临界区,mutex不同,信号量在同一时刻运行多个线程访问同一资源,信号量的使用只要涉及到CreateSemaphore() 、OpenSemaphore()、ReleaseSemaphore()、WaitForSingleObject()和WaitForMultipleObjects()等...

2020-02-13 23:26:36 322 0

原创 windows C++多线程(六):临界区CRITICAL_SECTION的使用

Windows提供的临界区对是CRITICAL_SECTION,使用步骤如下: (1)创建临界区对象 CRITICAL_SECTION Section; (2)初始化临界区InitializeCriticalSection(&Section); (3)进入临界区,禁止其他线程访问E...

2020-02-13 22:36:20 107 0

原创 windows C++多线程(五):线程同步

什么是同步,什么是异步? 生活中一个常见的例子,100赛跑,每个人一个跑道,互不干预各跑各的,这种可以看做是异步;100米接力,上一个人完成,下一个才能接力继续,这种是同步。 什么是互斥? 例如高考进教室要检查,每次进去一个人,这种称为互斥。 在多线程开发时,为了保证...

2020-02-13 22:25:18 67 0

原创 windows C++多线程(四):_beginthread的使用

windows创建线程一般都使用CreateThread,该函数与CRT有冲突,尽量不要使用该函数,应该用_beginthread,结束线程用_endthread,这两个函数可以成套的使用。 使用这两个函数需要包含的头文件#include <process.h> _beg...

2020-02-13 19:43:33 568 0

原创 windows C++多线程(三):线程终止结束ExitThread与TerminateThread

终止线程运行,最好的方法是自然返回return结束。在微软创建多线程API时,C/C++运行时库还不太成熟,导致一些API的调用与CRT会出冲突,使用CreateThread创建线程,并不是很推荐的,需要使用_beginthread。谈到线程终止,就得扯扯如下两个问题了 ExitThread()...

2020-02-13 10:39:43 1026 0

原创 windows C++多线程(二):线程等待WaitForSingleObject与WaitForMultipleObjects

关于线程的状态,各个书籍教材,系统的定义都有细微差别,主要有这几种状态:线程就绪(创建),运行,阻塞,终止等。本篇介绍windows多线程的阻塞等待相关的函数。 一 WaitForSingleObject 函数声明如下 DWORD WINAPI WaitForSingleObject( ...

2020-02-13 10:31:30 211 0

原创 windows C++多线程(一):创建线程CreateThread

在项目开发,乃至面试,都会用到多线程技术,windows提供了多线程开发的一系列API函数,各个函数的使用有些小的知识点如果不在意很容易出问题。趁着有时间,总结自己的一些使用记录及感受,如果博友看到本文,有不当之处请指正,留言。 本篇记录windows多线程开发的第一个API : Crea...

2020-02-13 10:16:18 621 0

原创 Qt setContentsMargins()函数使用说明

函数原型: void QLayout::setContentsMargins(intleft, inttop, intright, intbottom) 作用: 设置左侧、顶部、右侧和底部边距,以便在布局周围使用。 如下图: ...

2020-02-12 18:22:00 920 0

原创 C++四种强制类型转换

C++相对于C语言,提供了四种强制类型转换:static_cast、const_cast、reinterpret_cast和dynamic_cast 类型转换的一般形式:cast-name<type>(expression); 下面详细说明四种变换的用法 一. stat...

2020-02-12 10:27:55 68 0

原创 如何找出数组中第二大数(C++版)

代码如下: 找出数组中的第二大数 #include <stdio.h> //初始化最大值为a[0],次大值为a[1],遍历一次,每次比较并更新最大值和次大值,最后就可以得到次大值。 int find_Second_Maxvalue(int* a, int size) { int...

2020-02-12 10:15:09 942 1

原创 ffmpeg命令行视频剪辑与拼接

剪辑 ffmpeg -i 1.mp4-ss 00:10:00-c copy -to 00:20:002.mp4 原视频 开始时间 结束时间 输出的视频 拼接 首先,把要合并的视频按顺序写到1.txt里,例如 file '1.mp4'...

2020-02-09 21:14:36 593 0

原创 VS2017编译zlib源码

先下载zlib源码,zlib官网:http://www.zlib.net/翻到官网下面可以看到zlib的下载链接 windows平台可以下载zip或者tar.gz的文件,目前的版本是1.2.11,下面将提供3种编译方法。 一 命令行形式编译 在开始菜单找到VS2017x6...

2020-02-03 12:32:57 538 0

提示
确定要删除当前文章?
取消 删除