[C++0x] Boost Thread in Vector and use lamda as thread function

// =====================================================================================
//       Filename:  main.cpp
// 
//    Description:  thread learn from http://www.corensic.com/Learn/Resources/ConcurrencyTutorialPartOne.aspx
// 
//        Version:  1.0
//        Created:  2011年08月31日 14时52分22秒
//       Revision:  none
//       Compiler:  g++
// 
//         Author:  Jin Rongbo (), jinrongbo@gmail.com
//        Company:  JDSU
// 
// =====================================================================================

#include <iostream>
#include <algorithm>
#include <boost/thread.hpp>
#include <boost/shared_ptr.hpp>

typedef boost::shared_ptr<boost::thread> ThreadPtr;


int main()
{
    std::vector<ThreadPtr>workers;

    for (int i = 0; i < 10; ++i) {
      workers.push_back(ThreadPtr(new boost::thread([]()
                                      {
                                        std::cout << "Hello from new thread" << std::endl;
                                      })) );
    }

    std::cout << "Hello from main" << std::endl;

    //std::for_each(workers.begin(), workers.end(), myFunctor());
    std::for_each(workers.begin(), workers.end(), [](const ThreadPtr& th)
    {
      th->join();
    });


    return 0;
}
[Compile]
g++ (GCC) 4.7.0 20111119 (experimental)
CFLAGS += -O2 -DBOOST_THREAD_POSIX
CFLAGS += -m32 -std=c++0x
LDFLAGS +=-m32 -lstdc++ -pthread -L/usr/local/lib/boost/lib -lboost_thread

[Next Step]

Adopt "Boost Thread Group"
### 关于 C++ Lambda 表达式 Lambda 表达式是一种匿名函数,在 C++11 中被引入,它允许开发者在代码中定义小型的、一次性的函数对象。其语法结构如下: ```cpp [capture](parameters) -> return_type { body } ``` - **capture**: 捕获列表,用于捕获外部变量到 lambda 函数的作用域中[^1]。 - **parameters**: 参数列表,类似于普通函数的参数声明。 - **return_type**: 返回类型,默认情况下可以省略,编译器会自动推导返回类型。 - **body**: 函数体。 #### 示例代码 下面是一个简单的例子展示如何使用 lambda 表达式来实现加法操作: ```cpp #include <iostream> #include <functional> int main() { auto add = [](int a, int b) -> int { return a + b; }; // 定义一个lambda表达式 std::cout << "Result: " << add(3, 4) << std::endl; } ``` 在这个例子中,`add` 是一个 lambda 表达式,它接收两个整数作为输入并返回它们的和。 --- ### 关于 `std::function` 头文件及其相关内容 `std::function` 是 C++ 标准库中的一个重要工具类,位于 `<functional>` 头文件下。它的主要作用是用来封装任意可调用目标(如普通函数、函数对象、lambda 表达式等),使得这些不同的可调用实体能够统一处理[^2]。 #### 基本概念 `std::function` 的模板参数形式为 `std::function<返回类型(参数类型...)>`,表示它可以存储任何具有相同签名的可调用对象[^4]。 ##### 示例代码 以下展示了如何利用 `std::function` 来保存不同类型的可调用对象: ```cpp #include <iostream> #include <functional> // 普通函数 int multiply(int a, int b) { return a * b; } class Multiplier { public: int operator()(int a, int b) const { return a * b; } }; int main() { // 使用 std::function 存储不同类型的目标 std::function<int(int, int)> func; // 存储普通函数 func = multiply; std::cout << "Multiply result (func): " << func(6, 7) << std::endl; // 存储 lambda 表达式 func = [](int a, int b) { return a * b; }; std::cout << "Multiply result (lambda): " << func(6, 7) << std::endl; // 存储函数对象 Multiplier multiplierObj; func = multiplierObj; std::cout << "Multiply result (functor): " << func(6, 7) << std::endl; } ``` 上述代码片段演示了 `std::function` 如何灵活地支持多种可调用对象的形式,包括普通函数、lambda 表达式以及函数对象。 --- ### 结合 `std::thread` 和 `std::function` 除了单独使用外,`std::function` 还常与其他标准库组件配合工作,比如多线程编程中的 `std::thread`。通过将复杂的回调逻辑封装成 `std::function` 对象传递给线程构造函数,可以使程序设计更加清晰简洁[^3]。 #### 示例代码 这里给出一个多线程场景下的简单应用实例: ```cpp #include <iostream> #include <thread> #include <functional> void threadFunc(const std::string& msg) { std::cout << "Thread says: " << msg << std::endl; } int main() { // 将函数绑定至 std::function 并传入 std::thread 构造函数 std::function<void(const std::string&)> f = threadFunc; std::thread t(f, "Hello from thread!"); t.join(); // 等待子线程完成 } ``` 此案例说明了如何借助 `std::function` 实现更优雅的任务分发机制。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值