21xrx.com
2024-12-22 22:24:11 Sunday
登录
文章检索 我的文章 写文章
C++ 如何启动线程?
2023-06-30 04:39:36 深夜i     --     --
C++ 启动线程 thread std::thread 并发编程

C++是一种高性能的编程语言,具有强大的多线程处理能力。启动线程是C++中常见的任务,能够提高程序的并发处理能力和运行效率。

启动线程的方法有多种,以下是其中两种常用的方法:

方法一:使用 C++11 标准库中的 std::thread 类

在 C++11 标准中,引入了一个名为 std::thread 的线程类,通过该类可以快速启动一个新线程。下面是启动线程的一段示例代码:


#include <thread>

#include <iostream>

void func(int arg)

  std::cout << "thread arg is: " << arg << std::endl;

int main() {

  std::thread t(func, 123);

  t.join();

  return 0;

}

在上面的代码中,我们定义了一个名为 func 的线程函数,该函数打印出传入的参数 arg,并在主函数中创建了一个名为 t 的线程,并将 func 函数和参数 123 作为构造函数的参数传入。然后调用了 t.join() 函数,等待线程函数 func 的执行完成。最后程序返回 0 退出。

方法二:使用 C++11 标准库中的 std::async 函数

除了使用 std::thread 类启动一个线程外,C++11 标准库中还提供了一个名为 std::async 的函数,该函数可以快速创建一个异步任务,并返回一个 std::future 对象,通过该对象可以获取异步任务的执行结果。下面是一段使用 std::async 启动异步任务的示例代码:


#include <future>

#include <iostream>

int func(int arg) {

  std::cout << "task arg is: " << arg << std::endl;

  return arg * 2;

}

int main() {

  auto fut = std::async(func, 123);

  int res = fut.get();

  std::cout << "task res is: " << res << std::endl;

  return 0;

}

在上面的代码中,我们定义了一个名为 func 的函数,该函数打印出传入的参数 arg,并返回 arg 的两倍。然后在主函数中调用 std::async 函数,传入 func 函数和参数 123,并使用返回的 std::future 对象获取函数的返回值,并最终打印出执行结果。

以上是 C++ 中启动线程的两种常见方法,当然除此之外还有其他的线程库和工具可以使用,例如 Boost.Thread、Pthreads 等等。只要了解了其基本使用方法,就可以轻松地使用多线程提升程序的性能。

  
  

评论区

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