线程函数和线程启动的几种不同形式

线程函数和线程启动的几种不同形式

在C++中,线程函数和线程启动可以通过多种形式实现。以下是几种常见的形式,并附有相应的示例代码。

**1.**使用函数指针启动线程

最基本的方式是使用函数指针来启动线程。

示例代码:

cpp 复制代码
#include <iostream>
#include <thread>


void thread_function() {
    std::cout << "Thread function using function pointer." << std::endl;
}

int main() {
    std::thread t(&thread_function);
    t.join();
    return 0;
}

2. 使用Lambda表达式启动线程

Lambda 表达式提供了一种简洁的方式来定义线程函数。

示例代码:

cpp 复制代码
#include <iostream>
#include <thread>

int main() {
    std::thread t([] {
        std::cout << "Thread function using lambda expression." << std::endl;
    });

    t.join();
    return 0;
}

**3.**使用成员函数启动线程

可以通过类的成员函数来启动线程。

示例代码:

cpp 复制代码
#include <iostream>
#include <thread>

class MyClass {
public:
    void member_function() {
        std::cout << "Thread function using member function." << std::endl;
    }
};

int main() {
    MyClass obj;
    std::thread t(&MyClass::member_function, &obj);
    t.join();

    return 0;
}

4. 使用函数对象(Functor)启动线程

可以通过定义一个函数对象(Functor)来启动线程。

示例代码:

cpp 复制代码
#include <iostream>
#include <thread>

class ThreadFunctor {
public:
    void operator()() const {
        std::cout << "Thread function using functor." << std::endl;
    }
};

int main() {
    ThreadFunctor functor;
    std::thread t(functor);
    t.join();

    return 0;
}

**5.**使用带参数的线程函数

线程函数可以接受参数,并将这些参数传递给线程函数。

示例代码:

cpp 复制代码
#include <iostream>
#include <thread>


void thread_function_with_params(int id, const std::string& message) {
    std::cout << "Thread ID: " << id << ", Message: " << message << std::endl;
}


int main() {
    std::thread t(thread_function_with_params, 1, "Hello, Thread!");
    t.join();
    return 0;
}

6. 使用返回值的线程函数(结合std::future

使用 std::async 和 std::future 可以启动一个带返回值的线程函数。

示例代码:

cpp 复制代码
#include <iostream>
#include <future>

int thread_function_with_return() {
    return 42;
}

int main() {
    std::future<int> result = std::async(thread_function_with_return);
    std::cout << "Future result: " << result.get() << std::endl;

    return 0;
}

总结

以上示例展示了C++中启动线程的几种常见形式:

  • 使用函数指针
  • 使用 Lambda 表达式
  • 使用成员函数
  • 使用函数对象
  • 使用带参数的线程函数
  • 使用带返回值的线程函数(结合 std::future)
  • 通过这些方法,开发者可以根据具体需求选择最合适的线程启动方式。
相关推荐
RuoZoe5 小时前
从 2026 年 3 月 1 日开源,到 26.10.9:Jalium UI 半年时间到底走了多远?
c语言·c++
鱼子星_6 小时前
【C++】继承和多态(上)
c++·笔记
郝学胜-神的一滴8 小时前
Qt 高级编程 045:坐标体系深度实战
开发语言·c++·windows·python·qt·程序人生
码匠许师傅8 小时前
【设计模式精讲】22.中介者模式(Mediator)
c++·设计模式·软件工程·uml·中介者模式
爱吃巧克力的程序媛11 小时前
main.cpp注册 C++ 类到 QML 元对象系统
c++·qt
YYYing.11 小时前
【C++进阶系列 (二)】关于线程堆栈的那些事——函数调用过程
开发语言·c++·函数·线程堆栈
键盘会跳舞12 小时前
【C++多线程】死锁诊断工具实战:从 Windows 到 Linux 的全链路排查
linux·c++·windows·死锁
HugoStudio_SWAN12 小时前
洛谷 P10719 \[GESP202406 五级] 黑白格——暴力美学与图像处理的最小外接矩形
c++·图像处理·人工智能·学习·程序人生·算法·目标跟踪
jimy113 小时前
C++ 的 “移动语义”——Move Semantics
开发语言·c++
励志不掉头发的内向程序员15 小时前
【LibreCAD 2D架构】从鼠标点击到图形创建:RS_ActionDrawLine交互流程与状态机解析
开发语言·c++·qt·学习·系统架构·计算机外设·交互