📜  c++ 创建线程 - C++ (1)

📅  最后修改于: 2023-12-03 15:13:59.430000             🧑  作者: Mango

C++创建线程

在C++中,可以使用系统提供的线程库来创建线程,实现多任务处理的效果。本文将介绍C++创建线程的方法和示例代码。

线程库

C++标准库中提供了线程库<thread>,可以用来创建和管理线程。使用前需包含头文件<thread>

创建线程

创建线程需要使用线程库提供的类std::thread,将需要执行的函数作为参数传入。

#include <iostream>
#include <thread>

void testingFunction() {
    std::cout << "This is a test." << std::endl;
}

int main() {
    std::thread testThread(testingFunction);
    testThread.join();
    
    return 0;
}

上述代码中,testingFunction函数被定义为线程执行的任务,使用std::thread创建线程,并将testingFunction传入。testThread.join()是等待线程执行完毕的方法。

传递参数

如果任务函数需要传入参数,可以将参数作为参数传入线程。

#include <iostream>
#include <thread>

void testingFunction(int arg1, int arg2) {
    int result = arg1 + arg2;
    std::cout << "The result is: " << result << std::endl;
}

int main() {
    std::thread testThread(testingFunction, 2, 3);
    testThread.join();
    
    return 0;
}

上述代码中,testingFunction函数接收两个参数,并将参数相加输出结果。线程创建时,将两个参数一起传入。

返回值

如果任务函数有返回值,则需要使用std::promisestd::future来传递返回值。

#include <iostream>
#include <thread>
#include <future>

void testingFunction(std::promise<int> promiseObj, int arg1, int arg2) {
    int result = arg1 + arg2;
    promiseObj.set_value(result);
}

int main() {
    std::promise<int> promiseObj;
    std::future<int> futureObj = promiseObj.get_future();
    
    std::thread testThread(testingFunction, std::move(promiseObj), 2, 3);
    int result = futureObj.get();
    
    std::cout << "The result is: " << result << std::endl;
    
    testThread.join();
    
    return 0;
}

上述代码中,使用std::promise<int>创建一个可以传递int类型返回值的promise对象,并使用std::future<int>获取返回值。被线程执行的函数testingFunction需要传入promiseObj并返回结果,promiseObj.set_value(result)将结果存储在promise中,std::future<int> futureObj = promiseObj.get_future();将promise的返回值与future绑定。执行int result = futureObj.get();即可获取结果。

参考资料
  1. C++ Standard Library - Threads (https://en.cppreference.com/w/cpp/thread)
  2. C++11 线程库(thread库)使用指南 (https://www.zhihu.com/question/21145273)