自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(8)
  • 资源 (4)
  • 问答 (1)
  • 收藏
  • 关注

原创 确保线程执行函数体正确使用引用传递

1、前言    在启动一个线程时,我们首先需要定义一个线程执行体,这个可执行体可以是函数、仿函数或者lambda表达式。并且它们可以拥有任意数量的参数。如,    auto thHandler = std::thread([](){cout     以上一行代码运行时,会启动一个新的线程,线程的执行体为一个lambda表达式,这个线程会在控制台中高输出“a new thread“。

2015-10-28 18:30:29 3439 2

原创 如何干掉那又丑又长的switch..case语句

1、前言    在实际的编程中,我们经常会使用到switch..case语句,这通常也是对一长串if..else if语句的优化。对于一些简单的情况(只每个case代码中代码长度不会很长,而且case分之并不多的情况),用switch..case语句即可,此时代码的可读性并不会很差,结构也算是清晰。但是一旦case分支数目众多,每个case语句块中代码长度也很长,这时对于维护这段代码的同学则是

2015-10-27 09:41:46 19259

原创 遇见gtest--断言

1、前言    作为一个成熟的单元测试框架,gtest自然拥有一些用于判断值是否与期望一致的断言。在gtest中,断言分为两大类:ASSERT_*和EXPECT_*。它们的区别在于,ASSERT_*类断言在失败时,会立即退出当前的测试用例(即其所在的函数,但不会结束整个测试);EXPECT_*类断言在失败时,会继续执行,不会退出当前测试用例。    在每一个大类中,有分为多个小类别,它们分

2015-10-22 09:53:21 6027

原创 遇见gtest -- HelloGtest

1、前言    对于一个成熟的系统,为了保证系统正确的运行,测试代码量与功能代码量应该是相当的。对于C++而言,目前已经有一些单元测试框架,如gtest。本文对gtest的使用做一个简单的介绍。2、第一个测试用例    作为使用gtest的第一个用例,我们用以下示例来示范gtest的使用方法:    #include "gtest/gtest.h" bool isEv

2015-10-21 09:40:08 886

翻译 Effective modern C++ 条款 40:注意不同线程句柄的析构函数的行为

Item 39提到,一个joinable的std::thread对象对应了一个执行线程。一个非延迟任务(见Item 38)的std::future对象与系统线程也有类似的关系。因此,std::thread和std::future对象都可以看作线程的句柄。    从这个角度来看,std::thread和std::future的析构函数的区别如此之大就变得很有趣了。如Item 39所述,析构一个j

2015-10-19 09:23:11 1807

翻译 Effective modern C++ 条款 39:让std::thread在所有路径上不可join(Make std::threads unjoinable on all paths)

每个std::thread对象都处于两种状态之一:joinable和unjoinable。一个joinable的std::thread对象对应一个正在运行或处于可以运行状态的异步执行的线程。例如,一个处于阻塞状态或者等待被调度的线程是joinable的。    一个unjoinable的线程正如你所期待的:它不可以被join。unjoinable的std::thread对象包括:默

2015-10-19 09:18:32 2043 1

翻译 Effective modern C++ 条款 38:如果异步至关重要请指定std::launch::async

当你调用std::async来执行一个函数(或其他可执行体),你通常是想要异步执行这个函数的。但是std::async并不一定会那样做。实际上你是在要求函数按照std::async默认启动策略来运行函数。有两个标准策略,它们分别代表std::launch中的一个scoped枚举(详见Item10)。假设一个函数 f 被传至std::async来执行,std::launch::async

2015-10-16 09:52:19 2149

翻译 Effective modern C++ 条款37:基于任务编程优先于基于线程编程(Prefer task-based programming to thread-based)

有两种方法可以用来异步的运行一个函数doAsynWork。你可以创建一个std::thread来运行doAsynWork,以下是基于线程(thread-based)的方法:          intdoAsyncWork();    std::thread t(doAsyncWork);       或者你可以将doAsynWork作为参数传入std::async,这种方法

2015-10-15 09:53:07 1340

模式识别与机器学习

机器学习与人工智能方向很经典的入门书籍,本书从最基本的开始,循序渐进的介绍了模式识别和机器学习的基础知识和一些经典算法

2011-12-11

计算理论导引

计算理论的经典教材,里面详细介绍了图灵机的基本概念,以及有关算法复杂度的概念

2011-12-11

opencv参考书

本书详细介绍了opencv在计算机视觉中的应用

2011-12-11

新编c语言大全(适合初学者)

一本c语言教程,适合初学者。如果你想学习c语言,这是一本不错的电子书,希望能给您带来帮助

2011-03-12

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

TA关注的人

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