holyya.com
2025-09-04 16:29:17 Thursday
登录
文章检索 我的文章 写文章
C++中的类如何创建线程
2023-07-04 18:58:57 深夜i     --     --
C++ 线程 创建

在C++中,创建一个线程需要用到std::thread类。std::thread类是C++11标准中引入的一个类,它非常方便地封装了操作系统线程的相关函数,让我们可以轻松地创建线程,运行线程,以及其他操作。

下面是一个简单的例子,演示了如何使用std::thread创建一个线程并运行一个函数:


#include <iostream>

#include <thread>

void threadFunc()

  std::cout << "Running thread..." << std::endl;

int main() {

  std::thread myThread(threadFunc);

  std::cout << "Created thread..." << std::endl;

  myThread.join();

  return 0;

}

在上面的代码中,我们首先定义了一个函数threadFunc(),它将作为线程的入口点,即线程将从这里开始运行。我们然后使用std::thread类来创建一个线程myThread,并将threadFunc()作为参数传递进去。然后,我们输出一条创建线程的信息,并调用myThread.join()来等待线程运行结束。最后,程序返回0,退出主函数。

运行这个程序,我们将会看到输出:


Created thread...

Running thread...

可以看到,我们先输出了“Created thread…”,然后才是“Running thread…”。这是因为线程是异步运行的,即程序可以继续执行而不用等待线程完成。

除了使用函数作为线程的入口点,我们还可以使用一个C++对象的成员函数作为线程的入口点。下面是一个例子:


#include <iostream>

#include <thread>

class MyClass {

public:

  void memberFunc()

    std::cout << "Running thread..." << std::endl;

  

};

int main() {

  MyClass myObj;

  std::thread myThread(&MyClass::memberFunc, &myObj);

  std::cout << "Created thread..." << std::endl;

  myThread.join();

  return 0;

}

在这个例子中,我们定义了一个类MyClass,它有一个成员函数memberFunc(),成员函数即将作为线程的入口点。我们在main()函数中定义了一个MyClass对象myObj,并使用std::thread创建了一个线程myThread。

注意在这里参数&MyClass::memberFunc是指向成员函数的指针,而参数&myObj是指向MyClass对象的指针,它们需要一起传递给std::thread类来创建线程。这是因为C++类的成员函数在编译后会被转换成一个全局函数,需要传递对象指针来调用。

除了这些基本用法外,std::thread类还提供了许多其他的功能,例如设置线程的优先级,获取线程的ID,以及传递参数等。有了std::thread类,我们可以方便地创建、运行和管理线程,使得多线程编程变得更加简单和高效。

  
  

评论区

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