21xrx.com
2024-11-05 19:41:22 Tuesday
登录
文章检索 我的文章 写文章
C++线程的返回值
2023-07-12 16:20:35 深夜i     --     --
C++ thread 返回值

当我们使用C++线程时,可能希望线程的执行结果能够返回给主线程,以便后续的处理。C++11标准提供了std::thread类来支持线程操作,其中也包括了获取线程返回值的功能。

在std::thread的构造函数中,我们可以传入一个函数指针或者一个可调用对象作为线程执行的函数。如果这个函数或对象有返回值,我们可以通过std::thread的join()方法来获取该返回值。join()方法会等待线程执行结束并返回线程的返回值。

下面是一个例子:

 c++

#include <iostream>

#include <thread>

void display(int num) {

  std::cout << "Thread ID = " << std::this_thread::get_id() << std::endl;

  std::cout << "Display: " << num << std::endl;

}

int count(int start, int end) {

  int sum = 0;

  for (int i = start; i <= end; ++i) {

    sum += i;

  }

  return sum;

}

int main() {

  std::thread t1(display, 10);

  std::thread t2(count, 1, 100);

  t1.join();

  int result = t2.join();

  std::cout << "Thread ID = " << std::this_thread::get_id() << std::endl;

  std::cout << "Count result = " << result << std::endl;

  return 0;

}

在上述例子中,我们创建了两个线程,一个用于输出数字,一个用于计算1到100的累加和。在主线程中,我们使用join()方法等待这两个线程执行结束,并获取t2线程的返回值,即计算结果。

需要注意的是,如果我们在执行线程的函数中使用了局部变量或者指针等,需要注意这些变量是否被释放,以防止出现访问非法内存的问题。另外,如果线程函数抛出异常而未被处理,程序将会崩溃,需要通过捕获异常的方式来解决。

总之,C++11标准提供了std::thread来支持线程操作,并且可以方便地获取线程的返回值。使用时需要注意线程函数中的变量是否合理,以及对异常的处理。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复