21xrx.com
2024-12-23 01:10:38 Monday
登录
文章检索 我的文章 写文章
C++中如何创建线程
2023-07-01 13:39:16 深夜i     --     --
C++ 创建线程 thread join lambda函数

C++是一种高性能、高效的编程语言,它广泛应用于操作系统、嵌入式系统、游戏开发等领域。在C++程序中,为了充分利用多核CPU的性能优势,我们需要利用多线程技术。C++中创建线程非常简单,本文将介绍如何使用C++创建线程。

C++标准库提供了一个thread类,可以用于创建和管理线程。要使用thread类,我们需要包含 头文件。下面是创建一个线程的代码示例:


#include <iostream>

#include <thread>

using namespace std;

void func()

  cout << "Hello from thread!" << endl;

int main()

{

  thread t(func);

  t.join();

  return 0;

}

在这个示例中,我们首先声明了一个func函数作为线程的入口点。然后,在main函数中,我们创建了一个线程t,其入口点是func函数。

在线程对象被创建后,我们必须调用线程的join()方法来等待线程执行完毕。在这个示例中,我们使用join()方法来等待线程t执行完毕,然后退出程序。

在实际应用中,线程可能会执行一些比较复杂的任务,需要传递一些参数和返回值。对于这些要求,C++提供了多种方法。下面是一个参数化线程的示例:


#include <iostream>

#include <thread>

using namespace std;

void func(int x, int y)

{

  int sum = x + y;

  cout << "The sum of " << x << " and " << y << " is " << sum << endl;

}

int main()

{

  int x = 10, y = 20;

  thread t(func, x, y);

  t.join();

  return 0;

}

在这个示例中,我们声明了一个带有两个参数的func函数,在main函数中,我们创建了一个带有参数x和y的线程t。线程t被创建后,会自动调用func函数,并传递参数x和y。

线程执行完毕后,我们可以从线程中获取返回值。C++提供了promise和future类用于实现线程返回值的功能。下面是一个返回值线程的示例:


#include <iostream>

#include <thread>

#include <future>

using namespace std;

int func(int x, int y)

{

  int sum = x + y;

  return sum;

}

int main()

{

  int x = 10, y = 20;

  future<int> result = async(func, x, y);

  int sum = result.get();

  cout << "The sum of " << x << " and " << y << " is " << sum << endl;

  return 0;

}

在这个示例中,我们声明了一个int类型的func函数,在main函数中,我们使用async函数创建了一个线程,并传递参数x和y。async函数返回一个future对象,我们可以使用future对象的get()方法取得线程的返回值sum。

总结来说,C++中创建线程十分简单,只需要调用thread类的构造函数,并传递线程的入口点和参数即可。在需要获取线程的返回值时,我们可以使用promise和future类来实现。C++的多线程技术让程序的性能有了大幅度提升,为我们的编程工作带来了方便。

  
  

评论区

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