21xrx.com
2024-12-22 21:34:57 Sunday
登录
文章检索 我的文章 写文章
C++如何创建新线程
2023-07-02 17:09:55 深夜i     --     --
C++多线程 线程创建 std::thread 并发编程 线程同步

C++是一种面向对象的编程语言,它允许开发人员使用线程来实现多任务处理。线程是一种轻量级的进程,可以在程序内部启动和停止,从而实现并行和异步处理。在本文中,我们将探讨C++如何创建新线程。

一、C++线程库

在C++中创建线程需要使用线程库。C++11引入了一个名为std::thread的线程库,该库提供了创建和管理线程的方法。这个库还提供了一些辅助方法,如join()和detach(),来管理线程的生命周期。

二、创建新线程

下面是一个使用std::thread库创建新线程的示例:


#include <iostream>

#include <thread>

void function_to_run_in_thread()

  std::cout << "Thread running" << std::endl;

int main()

{

  //创建新线程

  std::thread t(function_to_run_in_thread);

  std::cout << "Main thread running" << std::endl;

  //等待线程结束

  t.join();

  return 0;

}

在上面的示例中,我们定义了一个名为function_to_run_in_thread()的函数来运行在线程中。我们使用std::thread t(function_to_run_in_thread)创建一个新线程,并在主线程中打印一条消息。最后,我们等待新线程结束,在使用join()方法将其加入到主线程中。

三、传递参数

在许多情况下,线程需要访问主线程作用域内的变量,或者我们需要将参数传递给在新线程中运行的函数。我们可以使用std::ref()函数传递参数,该函数将引用转换为std::thread可以接受的参数。以下是一个示例:


#include <iostream>

#include <thread>

void function_to_run_in_thread(int& num)

  std::cout << "Thread running with number " << num << std::endl;

int main()

{

  int num = 42;

  //创建新线程,并将num作为参数传递给function_to_run_in_thread

  std::thread t(function_to_run_in_thread, std::ref(num));

  std::cout << "Main thread running" << std::endl;

  //等待线程结束

  t.join();

  return 0;

}

在上面的示例中,我们向function_to_run_in_thread()函数传递了一个整数num作为引用。我们使用std::thread t(function_to_run_in_thread,std::ref(num))将num作为参数传递给了创建的新线程。num作为引用传递给function_to_run_in_thread()函数并进行修改,最后它在主线程中被检查。

四、总结

在本文中,我们介绍了在C++中使用std::thread库创建新线程的方法。我们看到了如何传递参数,并使用join()和detach()方法管理线程。线程是有效的多任务处理工具,掌握创建新线程的能力对C++程序员来说非常重要。

  
  

评论区

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