21xrx.com
2025-03-21 20:54:09 Friday
文章检索 我的文章 写文章
C++创建线程并传输数据
2023-07-11 01:51:03 深夜i     17     0
C++ 线程 数据传输

C++是一门流行的编程语言,而线程是它的重要部分之一。线程在C++中可以用于同时执行多个任务,从而提高程序的效率和处理多任务的能力。本文将介绍如何使用C++创建线程并传输数据。

在C++中创建线程的基本方法是使用头文件“thread”,该头文件中定义了可以将函数或类成员函数作为线程执行的函数。以下是一个简单的示例:

#include <iostream>
#include <thread>
using namespace std;
void threadFunction(int n)
{
  cout << "Thread function running. Thread ID=" << this_thread::get_id() << endl;
  cout << "Passed value = " << n << endl;
}
int main()
{
  cout << "Main thread ID=" << this_thread::get_id() << endl;
  int value = 5;
  thread t(threadFunction, value);
  t.join();
  cout << "Main thread ended." << endl;
  return 0;
}

在上述示例中,我们定义了一个函数“threadFunction”作为线程来执行。该函数将一个整数作为参数,并打印线程ID以及传递的整数值。在主函数中,我们定义了整数值“value”为5,并创建了一个线程“t”,将函数“threadFunction”作为参数传递,并传递整数值“value”作为函数的参数。我们使用“join()”函数来阻止主线程结束,直到线程“t”完成执行。

此时,我们可以执行程序,输出结果如下:

Main thread ID=140166855128768
Thread function running. Thread ID=140166846736640
Passed value = 5
Main thread ended.

从输出可以看出,主线程ID为“140166855128768”,而子线程ID为“140166846736640”。并且传递的整数值为“5”。

除了传递整数值,我们还可以通过指针或引用来传递更复杂的数据类型。以下是另一个示例:

#include <iostream>
#include <thread>
using namespace std;
struct Data
  int value1;
  int value2;
;
void threadFunction(Data& data)
{
  cout << "Thread function running. Thread ID=" << this_thread::get_id() << endl;
  cout << "Passed values:" << endl;
  cout << "value1 = " << data.value1 << endl;
  cout << "value2 = " << data.value2 << endl;
}
int main()
{
  cout << "Main thread ID=" << this_thread::get_id() << endl;
  Data data = 10;
  thread t(threadFunction, std::ref(data));
  t.join();
  cout << "Main thread ended." << endl;
  return 0;
}

在本示例中,我们定义了一个结构体“Data”,包含两个整数值。我们将该结构体作为线程函数的参数,并将其传递给线程。在线程函数中,我们输出了传递的两个整数值。在主函数中,我们创建了一个“Data”结构体对象,并将其传递给线程函数。

在执行程序后,输出应为:

Main thread ID=140555198914240
Thread function running. Thread ID=140555194089728
Passed values:
value1 = 10
value2 = 20
Main thread ended.

从输出中可以看出,我们成功地将一个结构体作为参数传递给了线程函数,并成功访问了结构体中的两个整数值。

总结:

本文介绍了如何使用C++创建线程并传输数据。在C++中,我们可以使用“thread”头文件来定义线程,并使用函数指针、类成员函数、引用或指针等方式将数据传递给线程。通过了解线程的基础知识,我们可以更好地利用它们来同时执行多个任务,提高程序的效率和性能。

  
  

评论区