c++11 关于 std::condition_variable 的问题 [问题点数:100分,结帖人P_hantom]

Bbs1
本版专家分:4
结帖率 98.18%
Bbs7
本版专家分:17604
版主
Blank
优秀版主 2016年10月优秀小版主
优秀小版主
Bbs5
本版专家分:3684
Bbs1
本版专家分:4
Bbs1
本版专家分:4
Bbs7
本版专家分:17604
版主
Blank
优秀版主 2016年10月优秀小版主
优秀小版主
Bbs12
本版专家分:377516
Blank
状元 2017年 总版技术专家分年内排行榜第一
Blank
榜眼 2014年 总版技术专家分年内排行榜第二
Blank
探花 2013年 总版技术专家分年内排行榜第三
Blank
进士 2018年总版新获得的技术专家分排名前十
2012年 总版技术专家分年内排行榜第七
Bbs1
本版专家分:4
Bbs7
本版专家分:17604
版主
Blank
优秀版主 2016年10月优秀小版主
优秀小版主
Bbs5
本版专家分:3129
Bbs7
本版专家分:15068
Blank
黄花 2015年10月 C/C++大版内专家分月排行榜第二
Blank
蓝花 2015年12月 C/C++大版内专家分月排行榜第三
2015年11月 C/C++大版内专家分月排行榜第三
Bbs5
本版专家分:3684
Bbs1
本版专家分:4
Bbs1
本版专家分:4
Bbs7
本版专家分:15068
Blank
黄花 2015年10月 C/C++大版内专家分月排行榜第二
Blank
蓝花 2015年12月 C/C++大版内专家分月排行榜第三
2015年11月 C/C++大版内专家分月排行榜第三
Bbs1
本版专家分:4
Bbs7
本版专家分:15068
Blank
黄花 2015年10月 C/C++大版内专家分月排行榜第二
Blank
蓝花 2015年12月 C/C++大版内专家分月排行榜第三
2015年11月 C/C++大版内专家分月排行榜第三
Bbs1
本版专家分:24
用条件变量(Condition Variable)实现信号量(Semaphore)
用条件变量(Condition Variable)实现信号量(Semaphore), 主要是通过条件变量控制资源数的加减操作,在这里定义sem_t 为     struct sem{         int num;         pthread_mutex_t lock;         pthread_cond_t  cond;                    };
c++11多线程中的condition_variable(条件变量)
目录 写在前面 解析 wait函数 wait_for函数 wait_until函数 notify_one函数 notify_all函数 栗子 参考书籍 写在前面 <em>condition_variable</em>条件变量可以阻塞(wait、wait_for、wait_until)调用的线程直到使用(notify_one或notify_all)通知恢复为止 首先要知道condition_v...
c++11之初始化列表
C++的学习中,我想每个人都被变量定义和申明折磨过,比如我在大学笔试过的几家公司,都考察了const和变量,类型的不同排列组合,让你区别有啥不同。反正在学习C++过程中已经被折磨惯了,今天再来看看重温下那段“辉煌的历史”。
c++11 实现半同步半异步线程池
感受: 随着深入学习,现代c++给我带来越来越多的惊喜… c++真的变强大了。 半同步半异步线程池: 其实很好理解,分为三层 同步层:通过IO复用或者其他多线程多进程等不断的将待处理事件添加到队列中,这个过程是同步进行的。 队列层:所有待处理事件都会放到这里。上一层事件放到这里,下一层从这里获取事件 异步层:事先创建好线程,让线程的去处理队列层的任务,上层不
C++ 11 正则表达式
阅读一下C++ <em>11</em>正则的文档
C++11 多线程同步 互斥锁 条件变量
在多线程程序中,线程同步(多个线程访问一个资源保证顺序)是一个非常重要的<em>问题</em>,Linux下常见的线程同步的方法有下面几种: 互斥锁 条件变量 信号量 这篇博客只介绍互斥量和条件变量的使用。互斥锁和条件变量通常情况下,互斥锁和条件变量是配合使用的,互斥锁用于短期锁定,主要保证线程对临界区的进入;条件变量用于线程长期等待,在wait的时候会释放锁。操作的API如下所示(介绍最常用的): <em>std</em>::m
基于c++11的信号量(携带数据)
在多线程工作中,线程同步是绕不过的一个<em>问题</em>。线程同步的方式主要有互斥量、临界区、原子操作等,本文主要研究信号量在线程同步中的作用。信号量的实质是一把数据锁,本身并不具备数据传递的功能。但我在实际使用中,常常会需要在发送一个通知的同时,传递数据给线程,因此就希望能让信号量拥有数据传递的能力。1. <em>condition_variable</em>和mutexc++<em>11</em>中,本身便提供了很方便的信号量实现方案,即利用...
c++11使用 async异步函数并传递参数以及auto的使用方法
class X { public: int foo(int a,<em>std</em>::string const& b){<em>std</em>::cout<<<<<<<<em>std</em>::endl;return a;} }; X x; //传入x是传入x的副本
c++11 thread --多线程编译报错问题解决办法
//test.cpp #include #include #include #include <em>std</em>::mutex mMutex; using namespace <em>std</em>; static int count=0; static int MAX=5000; static int line=0; static int line_count=5; void thread1(){
-std=gnu++11 导致的问题
今天打算在自己新的C++工程中启用C++<em>11</em>, 到时候了,该全面升级了。编译器是GCC4.8.1, 查看官方文档:http://gcc.gnu.org/onlinedocs/gcc-4.8.1/lib<em>std</em>c++/manual/manual/using.html#manual.intro.using.flags看到可以使用的选项是-<em>std</em>=gnu++<em>11</em>,结果编译报错,都是:/usr/bin/..
[转] C++11 并发指南系列
在C++ <em>11</em>的标准下面并发编程指南,包括多线程、锁、Promise/Future、原子操作、内存模型等知识
写优先防止读线程饿死的读写锁
标准库<em>std</em>::mutex, <em>std</em>::<em>condition_variable</em>实现的读写锁,写优先,通过优先级控制防止读线程饿死。在支持c++<em>11</em>不支持C++14的工程使用。
一个关于-std=c++11还是c++14的小问题
今天学C++<em>11</em>看到了shared_ptr,准备写一些测试代码来学习一下。 makefile写好了,很简单: #sample makefile CC := g++ CXXFLAGS := -g -Wall -<em>std</em>=c++<em>11</em> SRCS := $(wildcard ./*.cpp) OBJS := $(patsubst %.cpp, %.o, $(SRCS))#替换的时候是%符号,不是* ...
c++11线程池实现
咳咳。c++<em>11</em> 加入了线程库,从此告别了标准库不支持并发的历史。然而 c++ 对于多线程的支持还是比较低级,稍微高级一点的用法都需要自己去实现,譬如线程池、信号量等。线程池(thread pool)这个东西,在面试上多次被问到,一般的回答都是:“管理一个任务队列,一个线程队列,然后每次取一个任务分配给一个线程去做,循环往复。” 貌似没有<em>问题</em>吧。但是写起程序来的时候就出<em>问题</em>了。
C++11中function对象作回调函数的用法
回调函数
尝试用c11的条件变量和mutex写了一个读写锁
大家多多指正哈~ https://github.com/fishCi/c<em>11</em>/blob/master/rwlock.cpp #include #include #include #include #include using namespace <em>std</em>; class rwlock { private: mutex _lock; condition_v
C/C++学习笔记-eclipse不支持C++11问题
//TODO #include &amp;lt;iostream&amp;gt; #include &amp;lt;thread&amp;gt; <em>std</em>::thread::id main_thread_id = <em>std</em>::this_thread::get_id(); void hello() { <em>std</em>::cout &amp;lt;&amp;lt; &quot;Hello Concurrent World\n&quot;; if (main...
C++11新特性应用--实现延时求值(std::function和std::bind)
说是延时求值,注意还是想搞一搞<em>std</em>::function和<em>std</em>::bind。之前博客《C++<em>11</em>新特性之<em>std</em>::function》注意是<em>std</em>::function如何实现回调函数。现在就算是补充吧,再把<em>std</em>::bind进行讨论讨论。何为Callable Objects? 即可调用对象,比如函数指针、仿函数、类成员函数指针等都可称为可调用对象。对象包装器 Function wrapper
c++11 条件变量 std::condition_variable,多线程同步
一般来说,多线程中如果需要等待一个变量或者条件为true 或者同步多个线程,有两种方法:1 . 忙等待,不停地检查该变量是否满足条件while(pre) // polling loop {}该方式有很多缺点:占用cpu资源,变量 pre 必须多线程安全,或者为 atomic 类型。在while中sleep可以解决cpu占用为题,但是在变量满足条件时又不能及时的唤醒该线程。2 . 使用条件变量 st
C++11 Regex正则表达式初探
早就知道C++<em>11</em>标准增加了regex支持,昨天在VS2015试了下,很好用~今天在linux的G++上一试,发现G++就是坑啊,一编译运行直接抛出regex_error异常,这才知道。G++到4.9才支持regex,以前就只是个壳子…, 更新到4.9.3后就能正常使用了~其中主要的算法为regex_search, regex_match, regex_replace.链接:一个比较好的regex参
哲学家进餐问题 C++实现
哲学家进餐<em>问题</em>描述 假设有五位哲学家围坐在一张圆形餐桌旁,做以下两件事情之一:吃饭,或者思考。吃东西的时候,他们就停止思考,思考的时候也停止吃东西。餐桌中间有一大碗意大利面,每两个哲学家之间有一只餐叉。因为用一只餐叉很难吃到意大利面,所以假设哲学家必须用两只餐叉吃东西。他们只能使用自己左右手边的那两只餐叉。哲学家就餐<em>问题</em>有时也用米饭和筷子而不是意大利面和餐叉来描述,因为很明显,吃米饭必须用两根筷...
gcc、g++、cmake编译c++11问题
Ubuntu版本为:16.04, gcc/g++版本为:5.4.0,无法编译c++<em>11</em>,解决方法如下:gcc、g++在编译指令中加: -<em>std</em>=c++<em>11</em>如:gcc test.cpp -o test -<em>std</em>=c++<em>11</em>cmake编译在CMakeLists.txt文件中加一行:add_definitions(-<em>std</em>=c++<em>11</em>)...
C++:关于新版C++11一些细节解读(包括新版C++对库文件的引用、什么时候使用命名空间std等)
C++ 是在C语言的基础上开发的,c++由四部分组成  c,class,STL,template。 STL是标准模板库,template是泛型编程模板。C++是一门强类型语言,无法像动态语言(如pythont)摆脱对输入数据类型的限制。泛型编程弥补了这个缺点,通过把通用逻辑设计为模板,摆脱了类型的限制,提供一种抽象机制,极大地提升了代码的可重用性。 1、带.h的头文件和不带.h的头文件的由来 ...
C++函数指针、函数对象与C++11 function对象对比分析
1.函数指针 函数指针:是指向函数的指针变量,在C编译时,每一个函数都有一个入口地址,那么这个指向这个函数的函数指针便指向这个地址。函数指针主要由以下两方面的用途:调用函数和用作函数参数。 函数指针的声明方法 数据类型标志符 (指针变量名) (形参列表);  一般函数的声明为:   int func ( int x );  而一个函数指针的声明方法为:  int (*func
C++11 lambda表达式在for_each和transform算法下的使用
以前,在lambda表达式没有进入标准的时候,对容器的遍历等涉及到使用函数指针的情况,一般人会懒得使用<em>std</em>::for_each,或<em>std</em>::transform,也许只是一个短短的几句话,却要单独写个函数,或函数对象,写的代码反而不如自己用for循环来的快。 但是,C++<em>11</em>引入了lambda表达式后,一切都变的简单了! 1.lambda表达式 lambda表达式是一个匿名函
编译android时支持C++11
引用 [plain] view plaincopyprint? Android下使用c++<em>11</em>的测试 - zhangchen_qinyinghua的专栏 - 博客频道 - CSDN.NET   http://blog.csdn.net/zhangchen_qinyinghua/article/details/10033777   正文
C++11中的std::bind与Socket中的bind函数冲突问题
最近在写一些
C++11带来的随机数生成器
点击打开链接 1. random_device   标准库提供了一个非确定性随机数生成设备.在Linux的实现中,是读取/dev/urandom设备;Windows的实现居然是用rand_s,在这里强烈谴责一下.   random_device提供()操作符,用来返回一个min()到max()之间的一个数字.如果是Linux(Unix Like或者Unix)下,都可以使用这个来产
C++11新特性,利用std::chrono精简传统获取系统时间的方法
C++<em>11</em>新特性,利用<em>std</em>::chrono精简传统获取系统时间的方法
DevC++ 上的ISO C++ 11开关,使用C++ 11新特性
用DevC++ 运行C++ 程序时,出现如下错误error This file requires compiler and library support for the ISO C++ 20<em>11</em> standard. This support is currently experimental, and must  be enabled with the -<em>std</em>=c++<em>11</em> or -<em>std</em>=gn...
生产者和消费者模型(std::condition_variable
<em>std</em>::<em>condition_variable</em> 为了解决死锁而生的 当互斥操作不够用而引入的 比如,线程可能需要等待某个条件为真才能继续执行,而一个忙等待循环中可能会导致所有其他线程都无法进入临界区使得条件为真时,就会发生死锁。 所以,<em>condition_variable</em> 实例被创建出现主要就是用于唤醒等待线程从而避免死锁。<em>std</em>::<em>condition_variable</em>的 notify_one...
【C/C++开发】C++11的模板类型判断——std::is_same和std::decay
C++<em>11</em>的模板类型判断——<em>std</em>::is_same和<em>std</em>::decay <em>问题</em>提出:有一个模板函数,函数在处理int型和double型时需要进行特殊的处理,那么怎么在编译期知道传入的参数的数据类型是int型还是double型呢?  如: #include templatetypename TYPE> void typeCheck(TYPE data) { //do somet
在循环中使用std::condition_variable问题
我需要每帧执行处理数据与显示数据两个操作,显示的数据依赖于当前每帧处理数据的结果,需要循环每帧这两个操作。先利用C++<em>11</em>线程库对其进行优化。优化思路是这样的:开两个线程,分别循环执行处理数据与显示数据,先执行一次处理数据,以后每帧显示数据利用上一帧处理数据的结果,在显示数据的同时执行处理数据为下一帧显示所用。代码如下:rn[code=c]rnclass SimluateDrawrnrnpublic:rn int ProcessDataLoopFrameCount;rn int PresentDataLoopFrameCount;rn <em>std</em>::mutex Mutex;rnrn <em>std</em>::<em>condition_variable</em> CV_ProcessData2ndFrameBegin;rn <em>std</em>::<em>condition_variable</em> CV_PresnetDataFrameBegin;rn <em>std</em>::<em>condition_variable</em> CV_ProcessData3rdAndAfterFrameBegin;rnrn bool ProcessDataLastFrameFinish;rn bool PresentDataCurrentFrameFinish;rn bool FirstPresentDataFrameStart;rnrn SimluateDraw():rn ProcessDataLoopFrameCount(0U),rn PresentDataLoopFrameCount(0U),rn ProcessDataLastFrameFinish(false),rn PresentDataCurrentFrameFinish(false),rn FirstPresentDataFrameStart(false)rnrn void Run()rn rn <em>std</em>::thread ProcessDataLoopThread(&SimluateDraw::ProcessDataLoop, this);rn <em>std</em>::thread PresentDataLoopThread(&SimluateDraw::PresentDataLoop, this);rn ProcessDataLoopThread.join();rn PresentDataLoopThread.join();rn rnrn void ProcessDataLoop()rn rn auto CullOneFrame = [this]rn rn ProcessDataLastFrameFinish = false;rn <em>std</em>::this_thread::sleep_for(<em>std</em>::chrono::milliseconds(100));rn OutputDebugString(<em>std</em>::wstring(L"Complete Process Data Frame: " + <em>std</em>::to_wstring(ProcessDataLoopFrameCount++) + L"\n").c_str());rn ProcessDataLastFrameFinish = true;rn ;rnrn while (true)rn rn if (ProcessDataLoopFrameCount == 0)rn rn CullOneFrame();rn CV_PresnetDataFrameBegin.notify_one();rn rn else if (ProcessDataLoopFrameCount == 1)rn rn <em>std</em>::unique_lock Lock(this->Mutex);rn CV_ProcessData2ndFrameBegin.wait(Lock, [this] return FirstPresentDataFrameStart; );rn CullOneFrame();rn Lock.unlock();rn CV_PresnetDataFrameBegin.notify_one();rn rn elsern rn <em>std</em>::unique_lock Lock(this->Mutex);rn CV_ProcessData3rdAndAfterFrameBegin.wait(Lock, [this] return PresentDataCurrentFrameFinish; );rn CullOneFrame();rn Lock.unlock();rn CV_PresnetDataFrameBegin.notify_one();rn rn rn rnrn void PresentDataLoop()rn rn auto DrawOneFrame = [this]rn rn PresentDataCurrentFrameFinish = false;rn <em>std</em>::this_thread::sleep_for(<em>std</em>::chrono::milliseconds(100));rn OutputDebugString(<em>std</em>::wstring(L"Complete Present Data Frame: " + <em>std</em>::to_wstring(PresentDataLoopFrameCount++) + L"\n").c_str());rn PresentDataCurrentFrameFinish = true;rn ;rnrn while (true)rn rn if (!FirstPresentDataFrameStart)rn rn FirstPresentDataFrameStart = true;rn CV_ProcessData2ndFrameBegin.notify_one();rn rnrn <em>std</em>::unique_lock Lock(this->Mutex);rn CV_PresnetDataFrameBegin.wait(Lock, [this] return ProcessDataLastFrameFinish; );rnrn DrawOneFrame();rn Lock.unlock();rn CV_ProcessData3rdAndAfterFrameBegin.notify_one();rn rn rn;rnrnSimluateDraw simluateDraw;rnsimluateDraw.Run();rn[/code]rnrnrn现在<em>问题</em>是,如何我按debug一步一步调试,结果会如我预期那样,每帧都能执行处理数据与显示数据,并且等待某一步也正确。当不是一步一步调试时,结果确大相径庭,先是执行两次处理数据,然后就一直进行显示数据。这时候打断点到处理数据循环进行调试,发现处理数据的循环一直没有被命中,但断点到显示数据循环后再一步一步调试之后又能按照期望运行了。求助呀,这个<em>问题</em>我自己似乎解决不了了。
C++11:深入理解右值引用,move语义和完美转发
乍看起来,move语义使得你可以用廉价的move赋值替代昂贵的copy赋值,完美转发使得你可以将传来的任意参数转发给 其他函数,而右值引用使得move语义和完美转发成为可能。然而,慢慢地你发现这不那么简单,你发现<em>std</em>::move并没有move任何东西,完美转发也并不完美,而T&&也不一定就是右值引用…… move语义 最原始的左值和右值定义可以追溯到C语言时代,左值是可以出现在赋值符
升级 gcc g++ 版本 支持-std=c++11 特性
CentOS 6.6 升级GCC G++ (当前最新GCC/G++版本为v6.1.0) 或者 添加yum 的 repo 文件 也不行, 只能更新到 4.4.7! 采取手动编译安装了 1、 获取安装包并解压 wget http://ftp.gnu.org/gnu/gcc/gcc-6.1.0/gcc-6.1.0.tar.bz2 tar -jxvf gcc-6.1.0.tar.bz2 当然,...
C++11:bind和function配合使用
#include &amp;lt;iostream&amp;gt; #include &amp;lt;functional&amp;gt; using namespace <em>std</em>::placeholders; class Test { public: void func(int x, int y) { <em>std</em>::cout &amp;lt;&amp;lt; x &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; y &amp;lt;&amp;lt; st
[C/C++11]_[初级]_[实用时间库chrono]
场景 C++<em>11</em>开始提供了一个 实用时间库,相比C的time_t强多了,最明显的是可以精确到纳秒. vs2010还不支持这个库,所以比较可惜,对于新开发的项目,建议用2015可以使用最新特性. 一般用这个库来转换时间或计算函数执行时间或者CPU指令周期. 例子 #include #include #include #include
c++11 时间戳
chrono库包含3种类型:时间间隔duration、时间点time point和时钟clocks  1、时间段:duration、duration_cast         原型:template> class duration;     //<em>std</em>::ratio是一个分数, p1为分子, p2为分母, 默认为1, 1;         例:在chrono命名空间下, 时、分、秒、毫秒、微
条件变量的用法:CONDITION_VARIABLE
条件变量的用法:CONDITION_VARIABLE   20<em>11</em>-07-01 16:32:12|  分类: 默认分类 |举报 |字号 订阅 摘自:http://www.cnblogs.com/panda_lin/articles/1449139.html 多线程不仅仅是背几个API就能解决<em>问题</em>了 (英文版:http://msdn
在安卓JNI/NDK中使用C++11
在VS下编写的程序移植到Eclipse下,出现了<em>问题</em>:       this file requires compiler and library support for iso C++ 20<em>11</em> standard。 原因:是Eclipse使用的CDT默认未开启C++<em>11</em> 的支持。 解决方法:       Add "-<em>std</em>=c++<em>11</em>" to your CFLAGS in you
c++11中的tuple(元组)
转自:http://www.cnblogs.com/qicosmos/p/3318070.html 这次要讲的内容是:c++<em>11</em>中的tuple(元组)。tuple看似简单,其实它是简约而不简单,可以说它是c++<em>11</em>中一个既简单又复杂的东东,<em>关于</em>它简单的一面是它很容易使用,复杂的一面是它内部隐藏了太多细节,要揭开它神秘的面纱时又比较困难。   tuple是一个固定大小的不同类型值的集合,
C++11多线程std::condition_variable与lambda表达式的简单使用
** 前言 ** 将之前的一个多线程案例修改一下,增添了运行时间判断的函数 #include&amp;amp;amp;amp;amp;lt;sys/timeb.h&amp;amp;amp;amp;amp;gt; //获取执行时间 long getSysTime() { struct timeb tb; ftime(&amp;amp;amp;amp;amp;amp;tb); return tb.time * 1000 + tb.millitm; } 和双重锁定后: #include&amp;amp;
cmake 增加C++11支持
add_definitions(-<em>std</em>=c++<em>11</em>)orSET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -<em>std</em>=c++0x")
gcc 5.4 编译通用 C++ 线程池实现
gcc 5.4 通用 C++ 线程池实现
c++11信号量实现
c++<em>11</em>中有 mutex (互斥量),有 <em>condition_variable</em> (条件变量),并没有 semaphore (信号量)。信号量,操作系统中一般都有提,后来 google 说可以使用 mutex+<em>condition_variable</em> 实现一个,后来写来写去,都死锁 (deadlock) ——,O__O"…,后来 google 了一个,整理了一下思路。 信号量 神马是信号量?信号量
C++ vector容器(包含c++11标准)
构造函数 语法:    vector();   vector( size_type num, const TYPE &val );   vector( const vector &from );   vector( input_iterator start, input_iterator end ); C++ Vectors可以使用以下任意一种参数方式构造:  vector
C++11 std::move语意经典理解
原文链接 I find it easiest to understand move semantics with example code. Let’s start with a very simple string class which only holds a pointer to a heap-allocated block of memory: #include #include
基于C++11并发库的线程池与消息队列多线程框架——std::mutex类
mutex类是可以用来保护共享数据的同步原语,防止被其他线程修改,也就是保证了该线程对共享数据的独占式访问。 简而言之,互斥是为了防止多线程同时访问共享资源而产生数据竞争,并提供多线程的同步支持。 mutex  提供了独占式的,非递归的所有权语义: 线程拥有互斥量的周期:从调用lock()或者是try_lock()开始,到调用unclock()为止; 当线程拥有互斥量后,所有其他的线程尝试...
C++/C++11中头文件的使用
C++/C++<em>11</em>中头文件的使用
一、C++11多线程std::thread的简单使用(上)
出处:http://blog.csdn.net/star530/article/details/24186783 昨天练车时有一MM与我交替着练,聊了几句话就多了起来,我对她说:”看到前面那俩教练没?老色鬼两枚!整天调戏女学员。“她说:”还好啦,这毕竟是他们的乐趣所在,你不觉得教练每天都教学员是很枯燥的一件事么?所以调戏学员是他们每天的乐趣,这样工作才更有动力“。我承认听完她的话我愣住了! 事
c++11正则表达式入门
#include #include #include #include namespace <em>std</em> { typedef basic_regex wregex; } int main() { // 1.规则 <em>std</em>::regex rx; try { // ?等价于匹配长度{0,1} // *等价于匹配长度{0,} // +等价于匹配长度{1,} // 转义字符
C++11:基于STL对string,wstring进行大小写转换
C++标准库有对字符进行大小写转换的函数,但并没有提供对字符串的大小写转换函数,对C++ <em>std</em>::string进行字符串转换网上有很多文章了, 对于<em>std</em>::string,使用STL库algorithm中的transform模拟函数就可以实现,比如这篇文章: 《C++对string进行大小写转换》 #include &amp;lt;iostream&amp;gt; #include &amp;lt;stri...
【C++11】Any类的实现
boost库有一个Any类,是一个特殊的只能容纳一个元素的容器,他可以擦除类型,给任何类型赋值。 boost::any a = 1; boost::any a = 1.1; <em>std</em>::vector&amp;amp;amp;lt;boost::any&amp;amp;amp;gt; v; v.push_back(a); v.push_back(b); int va = boost::any_cast&amp;amp;amp;lt;int&amp;amp;amp;gt;(a); ......
C++11std::forward_list单向链表的使用
C++<em>11</em>中<em>std</em>::forward_list单向链表的使用
centos升级gcc到4.8.2(cc1plus: 错误:无法识别的命令行选项“-std=c++11”)
本文使用操作系统:Centos 6.4 Desktop,64bit;   原GCC版本:4.4.7;   目标:升级GCC到4.8.2,以支持C++<em>11</em>。 获取GCC 4.8.2包:wget http://gcc.skazkaforyou.com/releases/gcc-4.8.2/gcc-4.8.2.tar.gz; 解压缩:tar -xf gcc-4.8.2.tar
关于非c++11标准 vector容器的初始化
这里只说明常用的vector初始化的方式。一般vector的初始化我还是比较习惯于像数组一样的初始化方式。一个一个赋值,或者用花括号的初始化。下面用一个程序来说明: #include "<em>std</em>afx.h" #include #include using namespace <em>std</em>; int main(int argc, char* argv[]) { i
C++11实现信号量
由于C++<em>11</em> 和 Boost.Thread 都没有提供信号量,但是对于这个简单的东西,有时候使用就是太简单,但是为什么没有,可能他们觉得是这个东西太容易出错了,所以自己实现也不是很复杂。直接上代码: #include &amp;lt;<em>condition_variable</em>&amp;gt; #include &amp;lt;mutex&amp;gt;class Semaphore{public:Semaphore(unsigned...
为什么condition_wait要用while来判断condition条件?
<em>condition_variable</em>使用基本形式如下: lock while(condition) { wait(lock) } https://blog.csdn.net/matrixyy/article/details/50929150  lock后,wait实际上会unlock,然后其他线程才可能通过 lock change condition notify 修改...
C++11的chrono库,可实现毫秒微秒级定时
C++<em>11</em>有了chro #include usingnamespace <em>std</em>; usingnamespace <em>std</em>::chrono;   classTimer { public:     Timer() : m_begin(high_resolution_clock::now()) {}     void reset
C++11中万能的可调用类型声明std::function
在C++<em>11</em>中,callable object 包括传统C函数,C++成员函数,函数对象(实现了()运算符的类的实例),lambda表达式(特殊函数对象)共4种。程序设计,特别是程序库设计时,经常需要涉及到回调,如果针对每种不同的callable object单独进行声明类型,代码将会非常散乱,也不灵活。如下示例:#include #include u
c++11 线程原子变量
#include #include #include #include #include void func(int& _counter) {   for(int i=0; i     ++_counter; } void func2(<em>std</em>::atomic& _counter) {   for(int i=0; i     ++_counter
如何让QT支持C++11
在.pro文件里面添加 QMAKE_CXXFLAGS += -<em>std</em>=c++<em>11</em> OR CONFIG += c++<em>11</em>
C++11/14新特性
C++<em>11</em>是自C++98十余年来发布的一个新特性,扩充了很多C++的功能和特性,而C++14是对C++<em>11</em>的又一次补充和优化,这些新特性使得C++更贴近于一种现代化的变成语言。gcc版本大于5(clang版本大于3.8)已经全面支持C++14,并且在编译时需要开启-<em>std</em>=c++14选项用来支持c++14的特性,推荐在代码中直接使用c++14特性而不是c++<em>11</em>。 类型推导和判断 类型...
四、c++11错误处理
参考:http://blog.think-async.com/2010/04/system-error-support-in-c0x-part-3.html 参考:http://zh.highscore.de/cpp/boost/errorhandling.html 1. <em>std</em>::error_code value(): 当前平台的错误代码 category(); 2. <em>std</em>::err
《深入理解C++11》笔记-Unicode编码支持和原生字符串字面量
<em>std</em>::codecvt <em>std</em>::wstring_convert <em>std</em>::locale
C++11Reference(std常用库查询工具)
C++<em>11</em>的头文件在C语言基础上做了部分改进,下面这个链接包含了C++<em>11</em>中<em>std</em>命名空间的所有内容及用法示例,查询相当方便:   http://www.cplusplus.com/reference/...
C++11实现线程安全的单例模式(使用std::call_once)
1. 饿汉模式 使用饿汉模式实现单例是十分简单的,并且有效避免了线程安全<em>问题</em>,因为将该单例对象定义为static变量,程序启动即将其构造完成了。代码实现: #include &amp;amp;amp;lt;iostream&amp;amp;amp;gt; class Singleton { public: static Singleton&amp;amp;amp;amp; GetInstance() { static Singleton intanc...
C++11:尽量使用std::array来代替数组
C++<em>11</em>后,标准库引入了更现代化的数组<em>std</em>::array,cppreference.com是这样介绍的: 定义于头文件 &amp;amp;lt;array&amp;amp;gt; template&amp;amp;lt; class T, <em>std</em>::size_t N &amp;amp;gt; struct array; (C++<em>11</em> 起) <em>std</em>::array 是封装固定大小数组的容器。 此容器是一个聚合类型,其语义等同于保有...
C++11的线程类,创建的线程,如何设置优先级?
SetThreadPriority The SetThreadPriority function sets the priority value for the specified thread. This value, together with the priority class of the thread's process, determines the thread's base p
C++ 11 thread 多线程管理
C++ <em>11</em> 多线程的管理是基于 <em>std</em>::thread 类的, 该类提供了线程的管理 ,创建, 启动 , 执行等线程基本属性。创建线程:#include &amp;lt;iostream&amp;gt; #include &amp;lt;thread&amp;gt;#include &amp;lt;mutex&amp;gt;#include &amp;lt;<em>condition_variable</em>&amp;gt;using namespace <em>std</em>;void ...
C++的tie()函数
http://tech.quarkjoker.com/20<em>11</em>/06/22/C++%E7%9A%84tie()%E5%87%BD%E6%95%B0 今天看C ++ primer 时,看到了ios::tie() 函数。不明白其含义,跟不知道作用。于是上网查了一下。 cplusplus.com 给出的定义是: ostream* tie ( ) const; //返回指向绑定的输出
模板展开及integer_sequence妙用
integer_sequence自实现版本 #include &amp;lt;iostream&amp;gt; // the type holding sequences template &amp;lt;int... Ns&amp;gt; struct sequence {}; // First define the template signature template &amp;lt;int... N...
【原】C++ 11右值引用 std::move的作用
http://www.cnblogs.com/hujian/archive/2012/02/13/2348621.html 【原】C++ <em>11</em>右值引用        C++ <em>11</em>中引入的一个非常重要的概念就是右值引用。理解右值引用是学习“移动语义”(move semantics)的基础。而要理解右值引用,就必须先区分左值与右值。        对左值和右值的一
c++11新特性总结
1、类型与变量相关 1.1、nullptr: 取代了NULL,专用于空指针 1.2、constexpr: 近似const, 可以修饰变量,也可以修饰函数, 修饰变量如: const int global = 100; int main () { int temp = 100; constexpr int a = 1; //right constexpr int b
C++11--可以这么玩初始化列表吗?
我们知道C++<em>11</em>新增了初始化列表,在之前的博客中也有过介绍。 浅析C++中的初始化列表(区别赋值和初始化) c++<em>11</em>特性之initializer_list今天就讨论这么用初始化列表,不喜勿喷。先写一个类:class SimpleType { private: int a { 1 }; // << wow! int b { 1 }; // << wow2!
c++11实现写优先的读写锁
先直接贴出代码: 可以看出用c++<em>11</em>实现读写锁变得非常简洁,在读取量非常大且写入频率很低的时候,通过一个简单的写入线程计数可以避免大量的 cond_w.notify_one();减少读取线程因此发生的切换。
C++11新特性之 std::forward(完美转发)
上篇博客对右值、右值引用都做了简要介绍。我们也要时刻清醒,有时候右值会转为左值,左值会转为右值。 (也许“转换”二字用的不是很准确)如果我们要避免这种转换呢? 我们需要一种方法能按照参数原来的类型转发到另一个函数中,这才完美,我们称之为完美转发。<em>std</em>::forward就可以保存参数的左值或右值特性。因为是这样描述的: When used according to the following
初窥c++11:lambda函数及其用法
为什么需要lambda函数 匿名函数是许多编程语言都支持的概念,有函数体,没有函数名。1958年,lisp首先采用匿名函数,匿名函数最常用的是作为回调函数的值。正因为有这样的需求,c++引入了lambda 函数,你可以在你的源码中内联一个lambda函数,这就使得创建快速的,一次性的函数变得简单了。例如,你可以把lambda函数可在参数中传递给<em>std</em>::sort函数 #include
无锁编程:c++11基于atomic实现共享读写锁(写优先)
在多线程状态下,对一个对象的读写需要加锁,基于CAS指令原子语句可以实现高效的线程间协调。 以下代码实现了一个资源锁: readLock/Unlock 实现共享的读取锁,MAX_SHARE_COUNT用于限制同时读取的线程数, writeLock/Unlock 实现独占的写入锁,同时只允许一个线程写入,当写入线程执行时,所有的读取线程都被阻塞。 locck/unlock语句允许嵌套,
C++11与编译器支持
_MSC_VER是MSVC编译器的内置宏,定义了编译器的版本,_MSC_VER 值对应版本关系 MSVC++ <em>11</em>.0 _MSC_VER = 1700 (Visual Studio 2012)  MSVC++ 10.0 _MSC_VER = 1600 (Visual Studio 2010) MSVC++ 9.0 _MSC_VER = 1500  (Visual Studio 2008)
C++11中挂起线程
C++<em>11</em>中用sleep_untill()函数挂起线程 #define _CRT_SECURE_NO_WARNINGS #include&amp;lt;iostream&amp;gt; #include&amp;lt;iomanip&amp;gt; #include&amp;lt;thread&amp;gt; #include&amp;lt;chrono&amp;gt; #include&amp;lt;ctime&amp;gt; int main() { //获取...
C++11时间详解
转载请注明出处:        C++ <em>11</em>增加了三个与时间相关的类型:时间段、时钟、时间点。 以史为鉴        现有的系统API中,时间太过于碎片化了。有time_t(秒)、struct timeval(微秒)、struct timespec(纳秒)这几个时间单位,他们的接口非常不统一,点击这里可以体会一下。主要原因:是由于新业务的需求,要求提供不同精度的时间。于是每次出现新需求就定
关于SpringBoot bean无法注入的问题(与文件包位置有关)
<em>问题</em>场景描述整个项目通过Maven构建,大致结构如下: 核心Spring框架一个module spring-boot-base service和dao一个module server-core 提供系统后台数据管理一个module server-platform-app 给移动端提供rest数据接口一个module server-mobile-api 其中server-platform-app 与
F:\英语学习\tofel\王玉梅TOEFL词汇2005版.rar下载
F:\英语学习\tofel\王玉梅TOEFL词汇2005版.rar 相关下载链接:[url=//download.csdn.net/download/Melodysong19890104/1983650?utm_source=bbsseo]//download.csdn.net/download/Melodysong19890104/1983650?utm_source=bbsseo[/url]
Solid State Ionics for Batteries.pdf下载
关于锂离子电池一本好书,综述了最近锂离子电池正极、负极和电解液的进展。 相关下载链接:[url=//download.csdn.net/download/deijun/2172071?utm_source=bbsseo]//download.csdn.net/download/deijun/2172071?utm_source=bbsseo[/url]
操作系统实验教程 核心技术与编程实例下载
顾宝根等编著,PDG格式,请用超星阅读器打开. 讲述操作系统原理、实现方法及简单例子, 相关下载链接:[url=//download.csdn.net/download/gxfcljr/2206584?utm_source=bbsseo]//download.csdn.net/download/gxfcljr/2206584?utm_source=bbsseo[/url]
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 关于大数据培训 关于云计算
我们是很有底线的