自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 资源 (12)
  • 收藏
  • 关注

原创 C++ 多线程:std::future

概念我们前面介绍的std::thread 是C++11中提供异步创建多线程的工具,只能是异步运行任务,却无法获取任务执行的结果,一般都是依靠全局对象,全局对象在多线程下是及其不安全的,为此标准库提供了std::future类模板来关联线程运行的函数和函数的返回结果,这种获取结果的方式是异步的。std::future 通常由某个 Provider 创建,你可以把 Provider 想象成一个异步任务的提供者,Provider 在某个线程中设置共享状态的值,与该共享状态相关联的 std::future 对象调用

2022-04-02 16:18:13 13974 1

原创 C++多线程:thread_local

概念首先thread_local是一个关键词,thread_local是C++ 11新引入的一种存储期指定符。它会影响变量的存储周期(Storage duration),与它同是存储期指定符的还有以下几个:关键字说明备注auto自动存储期c++11前, “auto int x; ” 在c++11起错误register自动存储期。指示编译器将此对象置于处理器的寄存器中。c++17弃用static静态或者线程存储期的内部链接extern静态或者线程存储期的外部链接thread_local线程存储期c++11起m

2022-04-02 16:17:08 3456 1

原创 C++多线程:std::call_once

在多线程的环境下,有些时候我们不需要某个函数被调用多次或者某些变量被初始化多次,它们仅仅只需要被调用一次或者初始化一次即可。很多时候我们为了初始化某些数据会写出如下代码,这些代码在单线程中是没有任何问题的,但是在多线程中就会出现不可预知的问题。bool initialized = false;void foo() {    if (!initialized) {  &nbs

2022-03-31 06:44:10 2113

原创 C++多线程:Lambda表达式

定义Lambda 表达式可以说是c++11引用的最重要的特性之一,虽然跟多线程关系不大,但是它在多线程的场景下使用很频繁,所以在多线程这个主题下介绍它更合适。Lambda 来源于函数式编程的概念,也是现代编程语言的一个特点。C++11 这次终于把 Lambda 加进来了,令人非常兴奋,因为Lambda表达式能够大大简化代码复杂度(语法糖:利于理解具体的功能),避免实现调用对象。Lambda 表达式有如下优点:声明式编程风格:就地匿名定义目标函数或函数对象,不需要额外写一个命名函数或者函数对象。以更直接的方式

2022-03-31 06:43:08 6362 3

原创 C++多线程:condition_variable

官方定义在多线程编程中,有一种十分常见的行为:线程同步。线程同步是指线程间需要按照预定的先后次序顺序进行的行为。C++11对这种行为也提供了有力的支持,这就是条件变量(condition_variable和condition_variable_any)。条件变量位于头文件condition_variable下。condition_variable/condition_variable_any类是一个synchronization primitive,可用于阻止一个线程或同时阻止多个线程,直到另一个线程修改共

2022-03-26 07:50:31 2782 1

原创 C++多线程:锁管理(lock)

对于多线程,无法避免要使用到锁对共享资源的保护,这一节我们就来学习现代C++对于锁的管理(lock),上一节我们已经学习了现代C++对应的mutex,直到C++17,一共有六种类型。而今天学习的锁管理,与mutex息息相关,它们都是使用RAII风格来进行锁管理,主要有下面几种:std::lock_guard(C++11)std::unique_lock(C++11)std::share_lock(C++14)std::scoped_lock(C++17)首先来简单解释一下RAII这个名称的意思:❝「RAII

2022-03-26 07:49:38 11975 1

原创 C++ 多线程:互斥量(mutex)

C++ 11中的互斥量,声明在 <mutex> 头文件中,互斥量的使用可以在各种方面,比较常用在对共享数据的读写上,如果有多个线程同时读写一个数据,那么想要保证多线程安全,就必须对共享变量的读写进行保护(上锁),从而保证线程安全。互斥量主要有四中类型:std::mutex,最基本的 Mutex 类。std::recursive_mutex,递归 Mutex 类。std::time_mutex,限时 Mutex 类。std::recursive_timed_mutex,限时递归 Mutex 类。当

2022-02-23 21:29:26 2769

原创 C++多线程:std::thread

最近这段时间在学习C++多线程相关的知识,打算将学习的内容记录下来,加深理解和记忆。C++11 新标准中引入了五个头文件来支持多线程编程,他们分别是<atomic> ,<thread>,<mutex>,<condition_variable>和<future>。<atomic>:该头文主要声明了两个类, std::atomic 和 std::atomic_flag,另外还声明了一套C风格的原子类型和与C兼容的原子操作的函数。<th

2022-02-23 21:28:14 9621

原创 C++学习笔记:模板参数

C++学习笔记:模板参数本章节主要学习一下模板形参的基本知识。模板参数有三种类型:类型模板参数、模板的模板参数(以模板作为模板的参数)、非类型模板参数。类型模板参数类型模板参数是我们使用模板的主要目的。也就是普通的类型模板参数,模板参数(Template parameters)声明在函数名之前的尖括号内:template<typename T> // T是模板参数我们可以定义一个或者多个类型模板参数:template <typename 

2022-02-11 07:19:51 5248

原创 C++学习笔记:类模板

上一章我们介绍了函数模板,今天这章我们来学习类模板。类模板声明template是声明类模板的关键字,表示声明一个模板,模板参数可以是一个,也可以是多个,可以是「类型参数」 ,也可以是**非类型参数。**类型参数由关键字class或typename及其后面的标识符构成。非类型参数由一个普通参数构成,代表模板定义中的一个常量(后面再单独学习模板参数)。// T为类型参数,size为非类型参数template<class T, int size>class&

2022-02-11 07:18:57 696

原创 C++学习笔记:函数模板

函数模板C++提供了模板(template)编程的概念。所谓模板,实际上是建立一个通用函数或类,其类内部的类型和函数的形参类型不具体指定,用一个虚拟的类型来代表,是一种对类型进行参数化的工具。这种通用的方式称为模板。模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。C++模板通常有两种形式:函数模板和类模板;这篇文章主要讲函数模板相关知识,函数模板是那些被参数化的函数,它们代表的是一个函数家族。它的表示(即外形)看起来和普通的函数很相似,唯一的区别就是有些函数元素是未确定的,这些元素将

2022-01-20 06:54:31 604

原创 C++学习笔记:右值引用,移动和转发

右值引用是一种新的C++语法,是C++11标准对C++语言增添的新特性,基于右值引用引申出的2种C++编程技巧,分别为移动语义和完美转发。「移动语义」:将内存的所有权从一个对象转移到另外一个对象,高效的移动用来替换效率低下的复制,对象的移动语义需要实现移动构造函数(move constructor)和移动赋值运算符(move assignment operator)。「完美转发」:定义一个函数模板,该函数模板可以接收任意类型参数,然后将参数转发给其它目标函数,且保证目标函数接受的参数其类型与传递给模板函数的

2022-01-20 06:53:50 612

原创 C++学习笔记:左值、右值和左值引用

一直以来对左值和右值的理解局限于等号的左边是左值,等号的右边是右值;而最近在读一些开源代码时,时常遇到&,&&,std::move,std::forward等,简单bing一下,发现这是C++11 引入的新概念。左值&右值左值是指向一个指定内存的东西。另一方面,右值就是不指向任何地方的东西;左值则活的很久,因为他们以变量的形式存在,右值表示一个本应没有名称的临时对象。我们来看些例子:int a = 123;上面表达式中a是一个变量,它有具体的内

2022-01-14 09:45:41 397

原创 Git学习笔记:远程操作

远程操作前面很多章节我们学习的都是本地操作,包括初始化仓库,增加删除修改文件,提交文件,还有版本回退,分支管理和标签管理。今天这章节我们主要学习远程端的操作,主要有以下这几个操作:git configgit clonegit pullgit push今天这个文章主要时使用Gitee进行测试验证。关于如何申请注册Gitee账号以及创建Gitee仓库就不在这里讲了,大家不清楚的可以自行百度,都比较简单。Git配置首先在克隆远端代码前我们需要在Git配置远端的账号及邮箱信息:git conf

2021-06-27 07:59:12 208

原创 Git学习笔记:标签管理

Git tag如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签。Git tag 给当前分支打标签,一般是软件发版本前使用。这样就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。标签也是版本库的一个快照。它虽然是版本库的快照,但其实它就是指向某个 commit 的指针(跟分支很像,但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。创建标签Git支持两种标签:轻量标签(lig

2021-06-27 07:58:17 279

原创 Git学习笔记:分支管理

关于Git我们上面讲了好几个章节,Git基本操作:增删改查,还有版本回退。这一节我们学习Git最强大的功能-分支。什么是分支分支是为了将修改记录的整体流程分叉保存。分叉后的分支不受其他分支的影响,能在同一个数据库里可以同时进行多个修改。当然分叉的分支也可以合并。其实几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。在很多版本控制系统中,比如SVN,这是个昂贵的过程,常常需要创建一个源代码目录的完整副本,对大型项目来说会花费很长时间。

2021-06-27 07:56:21 159

原创 Git学习笔记:版本回退

版本回退上一章我们学习了Git的基本操作通过,git log可以查看历史记录,git show查看提交日志的相关信息。那么假如我今天不小心把不该提交的文件给提交了。也就是修改了本地的代码,然后使用:git add filegit commit -m '修改原因'执行commit后,还没执行push(把修改同步到远程仓库,后面讲)时,想要撤销这次的commit,该怎么办?这时我们可以git reset命令,如下:$git reset --soft HEAD^这个命令撤销commit的修改并

2021-06-27 07:55:13 155

原创 Git学习笔记:基本操作

增加内容第一步,我们先创建一个文件,然后在文件中增加一些内容。然后通过git status来查看当前这个工作区的情况,可以看到有一个提示说明test.txt文件位于当前master分支,并且是一个未跟踪的文件,如果要加入版本库跟踪需要使用git add建立跟踪。codemaxi@codemaxi-PC:~/git_test$ touch test.txtcodemaxi@codemaxi-PC:~/git_test$ lstest.txtcodemaxi@codemaxi-PC:~/git_te

2021-06-27 07:53:53 137

原创 Git学习笔记:版本库

版本库创建一个版本库:$git init已初始化空的 Git 仓库于 /home/codemaxi/git_test/.git/这样,一个空的版本库就创建好了,并在当前目录中创建一个叫 .git 的子目录。你可以用 ls -a 查看一下,并请注意其中的三项内容:codemaxi@codemaxi-PC:~/git_test$ ls -l .git/总用量 44drwxrwxr-x 2 codemaxi codemaxi 4096 5月 23 16:01 branches-rw-rw-r

2021-06-27 07:52:28 160

原创 Git学习笔记:概述

Git是什么Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的分布式版本控制系统。也是目前世界上最先进的分布式版本控制系统。与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持(注:这得分是用什么样的服务端,使用http协议或者git协议等不太一样。并且在push和pull的时候和服务器端还是有交互的),使源代码的发布和交流极其方便。 Git 的速度很快,这对于诸如 Linux kernel 这样.

2021-06-27 07:49:18 86

原创 使用PicGo和Gitee搭建图床

最近一直在使用Markdown写文章,Markdown是一种轻量级标记语言。它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的XHTML(或者HTML)文档。这种语言吸收了很多在电子邮件中已有的纯文本标记的特性。Markdown具有轻量化、易读易写特性,并且对于图片,图表、数学式都有支持,目前许多网站都广泛使用Markdown来撰写帮助文档或是用于论坛上发表消息。如GitHub、知乎,CSDN,简书等,甚至微信公众号也可以用Markdown来撰写。但是,这都不是重点,重点是我们写文章的时候,总

2021-04-13 22:28:28 660

原创 CUnit-Basic模式实例

今天继续运行CUnit Basic模式看看效果,Basic模式其实跟Console模式类似,只是Basic模式是非交互的,程序运行就直接开始执行测试。Basic模式中所有的测试信息都是通过标准输出(stdout)输出,可以调用函数CU_basic_set_mode控制输出信息。测试结束可以调用函数CU_basic_show_failures输出所有的测试失败信息。 CUnit - A unit testing framework for C - Version @VERSION@-@RELEAS

2021-04-08 11:15:49 224

原创 CUnit-Automated模式实例

1.简介Automated模式非交互式的。客户端启动测试运行,并将结果输出到XML文件。还可以将已注册测试和套件的列表也输出在XML中。可以调用函数CU_set_output_filename设置输出XML文件的文件名。调用函数CU_list_tests_to_file可以将测试Suite和Test也输出个另一个XML文件中。2.测试报告执行测试,执行成功后,会在当前目录下产生两个xml文件。VO_UNITTEST-Listing.xml :对测试用例的报告VO_UNITTEST-Results

2021-04-08 11:11:37 356

原创 CUnit-Console模式实例

上一篇学习翻译了CUnit官方文档,本篇我们来实际操作运行看看效果。正好目前正在做一个Linux的嵌入式项目,一通疯狂操作后终于把这个框架嵌入项目中了,今天主要是运行Console模式,实际效果如下:1.菜单:1.1 主菜单***************** CUNIT CONSOLE - MAIN MENU ******************************(R)un (S)elect (L)ist (A)ctivate (F)ailures (O)ptions (H)el

2021-04-07 17:14:50 293

原创 C语言堆栈与静态区的理解

什么是代码区、常量区、全局/静态区(全局区)、堆区、栈区? 每次听到这些区头都大了,很混乱经常忘记。确实C语言程序常涉及的基本就5个内存区:栈区主要用于函数调用的使用堆区主要是用于内存的动态申请和归还全局/静态存储区用于保存全局变量和静态变量常量区存放的是常量,不允许修改,程序结束后由系统释放。代码区用于存放函数体的二进制代码,也是由系统管理。下面来重点温习一下栈,堆和静态区:栈区栈是现代计算机程序里最为重要的概念之一。栈在程序中用于维护函数调用上下文,没有栈就没有函数,没有局部变量。

2021-04-01 21:54:17 2096

翻译 CUnit-基于C语言单元测试框架

本文是对《CUnit Programmer Guide》进行翻译以及加入了一些自己的理解,原文链接是:http://cunit.sourceforge.net/doc/index.html1.简介1.1 概述CUnit是一个用于编写,管理和运行C语言单元测试的系统。CUnit使用一个简单的框架来构建测试结构,并提供了一组丰富的断言来测试常见的数据类型。此外,还提供了几种不同的界面来运行测试和报告结果。这些功能包括用于代码控制的测试和报告的自动界面,以及允许用户动态运行测试和查看结果的交互式界面。在

2021-03-28 14:44:33 2247

原创 DVB-条件接收系统(CAS)

CAS条件接收系统CAS(Conditional Access System)是付费数字电视广播的核心技术,其主要功能是阻止非法入侵数字广播网络,并允许被授权的用户收看特定的节目而使未被授权的用户无法收看。CAS主要由两大系统组成:前端:完成广播数据的加扰并生成授权信息以及完成解扰密钥的加密工作。终端:由智能卡(或其他CA卡)和解扰器完成解密和解扰。其实细分一下,是由八个子系统组成:集成管理系统(IMS)节目管理系统(PMS)用户管理系统(SMS)前端条件接收系统(CAS)电子节目

2021-03-27 08:45:01 839

原创 markdown学习

markdown编辑器学习标题2标题3标题4快捷键撤销:Ctrl/Command + Z重做:Ctrl/Command + Y加粗:Ctrl/Command + B斜体:Ctrl/Command + I标题:Ctrl/Command + Shift + H无序列表:Ctrl/Command + Shift + U有序列表:Ctrl/Command + Shift + O检查列表:Ctrl/Command + Shift + C插入代码:Ctrl/Command + Shift +

2021-03-25 16:43:13 71

c#入门经典第五版.part3

C#入门经典系列是屡获殊荣的C#名著和超级畅销书。最新版的《C#入门经典(第5版)》全面讲解C# 2010基础知识,浓墨重彩地描述Web和Windows编程以及数据访问(数据库和XML)等内容,详细介绍C#编程工具以及Visual Studio 2010中的Visual C# 2010开发环境。贯穿全书的分步说明和极富启迪意义的示例指引您使用高效C# 2010代码得心应手地编写程序。(共3部分)

2011-10-04

c#入门经典第五版.part2

C#入门经典系列是屡获殊荣的C#名著和超级畅销书。最新版的《C#入门经典(第5版)》全面讲解C# 2010基础知识,浓墨重彩地描述Web和Windows编程以及数据访问(数据库和XML)等内容,详细介绍C#编程工具以及Visual Studio 2010中的Visual C# 2010开发环境。贯穿全书的分步说明和极富启迪意义的示例指引您使用高效C# 2010代码得心应手地编写程序。(共3部分)

2011-10-04

c#入门经典第五版.part1

C#入门经典系列是屡获殊荣的C#名著和超级畅销书。最新版的《C#入门经典(第5版)》全面讲解C# 2010基础知识,浓墨重彩地描述Web和Windows编程以及数据访问(数据库和XML)等内容,详细介绍C#编程工具以及Visual Studio 2010中的Visual C# 2010开发环境。贯穿全书的分步说明和极富启迪意义的示例指引您使用高效C# 2010代码得心应手地编写程序。(共3部分,下载完后解压即可)

2011-10-04

C#入门经典(第5版)_源码

C#入门经典(第5版)源码,绝对全,大家放心下载..

2011-09-07

C#本质论第3版.part2

本书是一部好评如潮的语言参考书,作者用一种非常合理的方式来组织本书的内容,由浅入深地介绍了C#语言的各个方面。全书共包括21章及6个附录,每章开头的“思维导图”指明了本章要讨论的主题,以及各个主题之间的层次关系。 全新升级版,涵盖C# 4.0   内容全面翔实,讲解精彩权威   C#入门进阶的首选之作 本书共两部分,下载后解压其中一个即可。

2011-09-07

C#本质论第3版.part1

本书是一部好评如潮的语言参考书,作者用一种非常合理的方式来组织本书的内容,由浅入深地介绍了C#语言的各个方面。全书共包括21章及6个附录,每章开头的“思维导图”指明了本章要讨论的主题,以及各个主题之间的层次关系。 全新升级版,涵盖C# 4.0   内容全面翔实,讲解精彩权威   C#入门进阶的首选之作 本书共两部分,下载后解压其中一个即可。

2011-09-07

C#语言规范4.0(中文版pdf 格式和word格式)

C#语言规范4.0(中文版pdf 格式和word格式) C# 语言规范是 C# 语法和用法的权威来源。 它包含有关该语言各个方面的详细信息,以及 Visual C# 产品文档未涉及的许多要点。

2011-09-06

CLR Via C# 中文版(第3版)

作者: (美)Jeffrey Richter [作译者介绍] 译者: 周靖 丛书名: 微软技术丛书 出版社:清华大学出版社 ISBN:9787302232599 上架时间:2010-9-10 出版日期:2010 年9月 深入、全面探讨.NET Framework、CRL和多核编程 广泛讨论FrameworkClassLibrary(FCL)核心类型 对泛型和线程处理等深奥难懂的开发概念提供权威、实用的指导

2011-09-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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