21xrx.com
2024-09-20 00:31:22 Friday
登录
文章检索 我的文章 写文章
"学习如何在C++中创建多线程"
2023-07-03 17:07:33 深夜i     --     --
C++ 多线程 创建 学习 教程

在C++中,多线程编程已成为许多程序开发工程师的标准实践。多线程编程允许程序同时执行多个任务,从而提高了程序的效率和响应性。这篇文章将带您一步一步学习如何在C++中创建多线程。

在C++中,创建一个线程需要使用 头文件。为了创建一个新线程,您需要定义一个函数对象(这个函数是您想让线程执行的功能)。您可以使用lambda表达式、函数指针或函数对象。

以下代码演示了如何使用C++创建一个新线程:

#include

#include

void thread_function()

  std::cout << "子线程开始执行!" << std::endl;

int main()

{

  std::thread t(&thread_function); // 创建新线程

  std::cout << "主线程开始执行!" << std::endl;

  t.join(); // 等待子线程完成

  std::cout << "主线程结束!" << std::endl;

  return 0;

}

这段代码会创建一个新线程,并在子线程中调用thread_function函数。主线程会等待子线程完成后才能继续执行。

还可以传递参数给线程函数。以下代码演示了如何在线程函数中使用参数:

#include

#include

void thread_function(int x)

x的值为:" << x << std::endl;

int main()

{

  int x = 10;

  std::thread t(&thread_function, x); // 创建新线程并传递参数

  std::cout << "主线程开始执行!" << std::endl;

  t.join(); // 等待子线程完成

  std::cout << "主线程结束!" << std::endl;

  return 0;

}

此代码将x传递给线程函数,并在线程函数中打印其值。在线程函数中可以传递任意数量和类型的参数。

最后,如果您需要让多个线程并行执行,则可以使用std::async和std::future。std::async会启动一个新线程去执行指定的函数,并返回一个std::future对象,您可以使用它来检索函数的返回值。以下代码演示了如何使用std::async和std::future:

#include

#include

double compute(int n)

{

  double sum = 0.0;

  for (int i = 0; i < n; i++)

  {

    sum += i;

  }

  return sum;

}

int main()

{

  std::future fut = std::async(compute, 1000000); // 创建异步任务

  std::cout << "正在执行其他操作..." << std::endl;

  double result = fut.get(); // 获取结果

  std::cout << "计算结果为:" << result << std::endl;

  return 0;

}

您可以使用std::async并发地执行计算,并在主线程中继续执行其他操作。随后,您可以使用fut.get()方法来等待计算完成,并获取结果。

学习如何在C++中创建多线程是很重要的,尤其是在需要执行需要耗费大量时间的操作时。虽然多线程编程可能有点困难,但掌握这个技能可以让您的程序更加高效和可扩展。

  
  

评论区

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