- 博客(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
使用gperftools分析性能生成的pdf文件没有函数调用关系
2016-06-23
TA创建的收藏夹 TA关注的收藏夹
TA关注的人