自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 无他,惟手熟尔

卖油翁 陈康肃公善射,当世无双 ,公亦以此自矜。尝射于家圃,有卖油翁释担而立,睨之久而不去。见其发矢十中八九,但微颔之。   康肃问曰:“汝亦知射乎?吾射不亦精乎?”翁曰:“无他, 但手熟尔。”康肃忿然曰:“尔安敢轻吾射!”翁曰:“以我酌油知之。”乃取一葫芦置于地,以钱覆其口,徐以杓酌油沥之,...

2020-04-22 21:25:55 140 6

原创 屏障(barrier)

屏障给我们提供了多个线程协调工作的一种方式,屏障允许每个线程等待,直到所有的合作线程都到达某一点,然后从该点继续执行。有了屏障,我们处理合作线程就变得简单多了。 下面来介绍一下相关的函数 和前面的线程同步的函数类似,init用来初始化,destroy用来反向初始化。 初始化函数pthre...

2020-05-11 01:15:10 127 2

原创 自旋锁

自旋锁的具体描述,可以看这里: https://blog.csdn.net/zy010101/article/details/83869140 自旋锁适合于锁被持有的时间比较短的场合,这样能避免线程调度的时候花费的成本(因为阻塞引起线程休眠,唤醒线程花费的代价可能比自旋锁忙等花费的更大)。 ...

2020-05-10 23:22:45 94 0

原创 线程同步之条件变量(pthread_cond_wait)
原力计划

条件变量 条件变量给了线程以无竞争的方式等待特定条件发生。条件变量是和互斥量一起使用的,条件变量是由互斥量保护的。这么讲,大家可能不明白,这条件变量有什么用?干什么的?还是结合pthread_cond_wait()函数来分析一下吧! 下面给出本文讲使用的的有关条件变量的函数。 单刀直入,...

2020-05-10 21:40:35 105 0

原创 POSIX读写锁

续接上一篇“线程同步”:https://blog.csdn.net/zy010101/article/details/105967289 本文讲述读写锁。读写锁和互斥量不太一样,它允许锁可以是读加锁,写加锁以及未加锁三种状态。每次只能由一个线程处于写加锁状态,但是可以有多个线程处于读加锁状态。 ...

2020-05-07 21:10:33 56 0

原创 线程同步(POSIX)
原力计划

线程同步 关于同步这个概念以及同步的处理方法,请看下面链接给出的文章: https://blog.csdn.net/zy010101/article/details/83869140 经典的一些同步问题,请看下面的这一篇文章: https://blog.csdn.net/zy010101/...

2020-05-07 18:29:32 80 0

原创 线程清理(pthread_cleanup_push函数和pthread_cleanup_pop函数)
原力计划

看了一会儿,没看懂这个,绝了。书上写的颠三倒四。文档给每个函数两句话。也是没看懂啊!

2020-05-06 22:58:02 91 0

原创 Linux下多线程的实现(基于pthread库)
原力计划

Linux内核在2.2版本中引入了类似线程的机制。Linux提供的vfork函数可以创建线程,此外Linux还提供了clone来创建一个线程,通过共享原来调用进程的地址空间,clone能像独立线程一样工作。Linux内核的独特,允许共享地址空间,clone创建的进程指向了父进程的数据结构,从而完成...

2020-05-06 11:31:33 134 0

原创 标准I/O库(ISO C的标准I/O库)
原力计划

本文讲述由ISO C定义的标准I/O库。这个库已经拥有非常长时间的历史了,它由D.R.在1975年左右编写,现在已经过去45年了。但是ISO C几乎没有对标准I/O库做出修改。不用我说,大家也知道这个库存在的问题应该是非常多的。 标准输入,标准输出,标准出错 Linux下的不带缓冲的I/O是围...

2020-05-01 22:17:47 78 0

转载 Linux中apt与apt-get命令的区别与解释

Linux中apt与apt-get命令的区别与解释 随着 apt install package 命令的使用频率和普遍性逐步超过 apt-get install package,越来越多的其它 Linux 发行版也开始遵循 Ubuntu 的脚步,开始鼓励用户使用 apt 而不是 apt-g...

2020-04-25 15:57:09 86 0

原创 C/C++未定义行为

下面是一段代码,这段代码中有标准未定义的行为。代码如下: #include<iostream> using namespace std; int main() { int j = 0; for (int i = 0; i < 10; i++) ...

2020-04-14 11:08:53 112 0

原创 fcntl函数

fcntl函数能够改变已经打开文件的属性。 fcntl函数的的功能其实很复杂,它的功能取决于cmd这个参数。在获取(修改)已打开文件状态标志的时候,cmd这个参数取F_GETFL或F_SETFL #include<unistd.h> #include<fcntl.h&g...

2020-04-12 17:19:54 67 0

原创 Qt绘图设备

我也不转载了。直接看豆子博客:https://www.devbean.net/2012/12/qt-study-road-2-paint-device/ 需要说明的是现在Qt下使用OpenCV和OpenGL是很方便的,关于图像的处理你可能需要OpenCV,关于图形的绘制,渲染,你可能需要Op...

2020-04-11 11:43:04 40 0

原创 Qt绘制COS函数

Qt的绘图系统是极其强大的。下面来展示一下绘制自定义图形的大致绘图方式。 void MainWindow::paintEvent(QPaintEvent *event) { // paint = new QPainter(this); // paint->setPen(QCo...

2020-04-11 11:34:08 111 0

原创 Qt绘图事件

Qt的绘图是在绘图事件中完成的。整个绘图系统基于QPainter,QPainterDevice和QPaintEngine三个类。 QPainter是用来绘制的,QPainterDevice是绘图设备,QPainter会把图绘制在QPainterDevice上面。 ...

2020-04-11 10:29:55 55 0

原创 Qt定时器(二)QTimer

使用timerEvent可以捕获到定时器事件,但是当定时器较多的时候,使用事件来捕获显得不怎么方便。因此,我们可以使用<QTimer>来完成。 在我们需要使用定时器的地方new一个QTimer出来。如下: QTimer *timer1 = new QTimer; timer1-&...

2020-04-10 14:54:24 26 0

原创 Qt定时器(一)

定时器也是一个我们经常使用的东西。下面的代码演示了定时器的基本使用方法。 #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent...

2020-04-10 00:43:57 29 0

原创 Qt事件

事件是指诸如,移动鼠标,点击按钮,定时器,按下键盘等。他们是由系统或者Qt发出的。所谓事件驱动,简单地说就是你点什么按钮(即产生什么事件),电脑执行什么操作(即调用什么函数)。也就是说当我们的界面显示以后,程序就进入了事件循环。程序在等待事件的发生,假设你的界面上可能有3个按钮,那么程序不肯能一个...

2020-04-09 23:15:25 16 0

原创 Qt中常见的错误

信号函数或者槽函数有多个重载。 例如: valueChanged()函数有两个重载,那么我们在使用这个信号的时候就需要使用一个函数指针明确的指向其中一个函数。例如: void (QSpinBox:: *p)(int) = &QSpinBox::valueChanged; 这样...

2020-04-09 22:56:13 39 0

原创 Qt自定义控件

Qt允许我们自定义控件。这大大提高了设计UI的通用性。 首先,新建一个项目。然后添加Qt设计师界面类。如下所示: 然后给你的控件起个名字,比如MyWidget。 创建完成以后,会直接来到UI设计界面。我们往里面拖一个Spin Box和Horizontal Slider。然...

2020-04-09 22:19:34 32 0

原创 Qt布局管理器

在使用Qt Design来设计界面布局的时候,Qt为了方便我们提供了布局管理器。但是一定要设计了布局,才能使用弹簧,否则弹簧没有效果。如下所示: 上图就是一个局部使用水平布局,而整体使用了垂直布局。实际运行效果如下: 如果是普通的登陆界面,那么我们有必要把界面的大小写死。这样并不会影响...

2020-04-09 14:34:14 24 0

原创 Qt模态对话框和非模态对话框

Qt 中使用QDialog类实现对话框。我们的对话框通常继承自QDialog。对话框分为模态对话框和非模态对话框。所谓模态对话框,就是会阻塞同一应用程序中其它窗口的输入。 ...

2020-04-08 17:18:54 40 0

转载 Qt对象模型

标准 C++ 对象模型在运行时效率方面卓有成效,但是在某些特定问题域下的静态特性就显得捉襟见肘。GUI 界面需要同时具有运行时的效率以及更高级别的灵活性。为了解决这一问题,Qt “扩展”了标准 C++。所谓“扩展”,实际是在使用标准 C++ 编译器编译 Qt 源程序之前,Qt 先使用一个叫做 mo...

2020-04-08 16:45:47 39 0

原创 Win10子系统Ubuntu的安装和使用

有了win10子系统Ubuntu,真的太好用了,再也不用搞什么虚拟机,双系统了。 下面直接开始教你们安装: 等待启用完毕之后,不用立即重启。先去微软商店,安装Ubuntu系统。 这里选择了16.04 LTS版本,你也可以选择18.04 LTS版本。安装即可。然后重启。...

2020-04-07 22:10:37 94 0

原创 Qt添加资源文件

为了方便跨平台使用,Qt提供了一个资源系统。资源系统用于将程序运行时所需要的资源以二进制的形式存储于可执行文件内部。也就是把资源文件编译成为可执行文件的一部分。这样就不怕路径问题以及资源文件被误删。 在这里先分享一个免费获取图标的网站:https://www.iconfinder.com/ 好...

2020-04-06 23:45:21 82 0

原创 QDockWidget和setCentralWidget
原力计划

本文承接上文:Qt创建菜单栏,工具栏,状态栏 本篇将介绍主窗口剩下的Dock Widget Area和Center Widget。在Qt中,使用QDockWidget来创建浮动窗口。而Center Widget则可以是任何能放到中间区域的控件。下面直接上代码来进行说明。 //MainWind...

2020-04-06 21:42:16 96 0

原创 Qt创建菜单栏,工具栏,状态栏

QMainWindow允许在其上创建菜单栏,工具栏和状态栏,我们就在QMainWindow上来创建它们。直接上代码,代码中有详细的注释。 //MainWindow.h文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMain...

2020-04-06 19:45:21 105 0

原创 QMainWindow和QAction

QMainWindow是Qt 框架带来的一个预定义好的主窗口类。一个主窗口一般都是由下图所示部分组成。 我们在创建Qt应用程序的时候,就可以选择主窗口继承自QMainWindow。这样我们的就可以在MainWindow中添加窗口标题,菜单栏,工具栏,状态栏等上图所示的控件。 在Qt中使...

2020-04-06 19:04:46 52 0

原创 Qt模块介绍

Qt5中,模块已经非常细化了,关于模块的详细信息可以在帮助文档中看到。Qt的帮助文档叫Qt助手。为了方便使用,我们一般都是把它固定在任务栏。 Qt Core模块: 提供核心的非 GUI 功能,所有模块都需要这个模块。 Qt Gui模块: 提供 GUI 程序的基本...

2020-04-06 11:26:52 58 0

原创 Qt自定义信号槽

Qt的信号槽机制不仅可以使用系统提供的部分,也可以自定义信号槽。信号槽是Qt的核心机制,只要是继承了QObject类的子类或者间接子类都可以使用信号槽机制,无论是不是GUI程序。 下面我们来实现一个自定义的信号槽,我们将有两个类,分别是Teacher和Student。老师讲课,学生听课。 /...

2020-04-06 01:21:21 38 0

原创 Qt初识信号槽
原力计划

在Qt框架下,使用信号槽机制来完成事件处理。 信号就是发生的事件,槽就是处理事件的函数。这两者不在一起,不像MFC的消息循环机制。它们是松散的耦合。要想将它们连接起来,那么必须使用connect函数来连接它们。例如,当我想实现,点击关闭按钮就会关闭当前窗口的操作。那么我就需要使用connect函...

2020-04-05 23:33:11 41 0

原创 Qt显示Hello World

#include "widget.h" //对于 Qt 程序来说,GUI 程序是QApplication //非 GUI 程序是QCoreApplication。QApplication派生自QCoreApplication #include <QApplicatio...

2020-04-05 19:04:17 77 0

原创 Qt工程文件介绍

QT += core gui #Qt的两大核心模块,Qt gui和Qt core greaterThan(QT_MAJOR_VERSION, 4): QT += widgets #Qt4之后,widgets模块从gui模块分离了出来,所以需要加上 CO...

2020-04-05 17:55:49 75 0

原创 创建第一个Qt程序

#include "widget.h" //对于 Qt 程序来说,GUI 程序是QApplication //非 GUI 程序是QCoreApplication。QApplication派生自QCoreApplication #include <QApplicatio...

2020-04-05 17:36:30 57 0

原创 C++之STL

STL简介 STL是Standard Template Library的简称,中文名标准模板库,惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。从根本上说,STL是一些“容器”的集合,这些...

2020-04-05 12:25:21 29 0

原创 C++之异常

程序运行时常会碰到一些异常情况,例如:数组越界,除以0,内存分配失败等。这些情况,如果放任不管,那么就会发生错误。 C++提供了异常的捕获和处理。并且异常捕捉和异常处理可以不在一个函数之中。这能帮助我们更好的设计程序。这就是说函数 A 在执行过程中发现异常时可以不加处理,而只是“拋出一个异常”。...

2020-04-04 13:57:01 74 0

原创 模板的一些语法问题

模板无疑是非常复杂的,一个模板类。你把成员函数实现在类内,是比较简单的。当然,你也可以实现在类外。这时候你有两个选择,在同一个文件实现成员函数,在另一个.cpp里实现成员函数,头文件只包含函数声明。 当你写在同一个文件里的时候,只需要在函数实现的地方处处加上模板定义以及表明类是一个模板了即可。如...

2020-04-04 12:04:44 33 0

原创 C++之模板类派生子类

从模板类派生普通类 template<typename T> class Parent { public: Parent(T a); ~Parent(); private: T a; }; template<typename T> //模板的作用范围是紧...

2020-04-04 10:57:30 90 0

原创 C++之函数模板(二)

通过函数模板定义的函数如果和普通函数名称相同,以及重载函数模板,我们在调用这个函数的时候,到底是执行哪一个函数。 #include"header.h" using std::cout; using std::endl; void swap(int& a, int&...

2020-04-03 21:05:54 59 0

原创 C++之函数模板(一)

C++是一门非常强大,非常复杂,非常庞大的语言。C++本身从C语言发展而来,它一开始就具备了面向过程编程和面向对象编程这两种编程范式(编程风格,其实就是程序设计的不同哲学理念)。后来随着C++的逐步发展,它支持了泛型编程。本文将要介绍的函数模板就是泛型编程的程序设计理念。再后来C++有了模板元编程...

2020-04-03 20:01:28 55 0

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