21xrx.com
2024-12-22 21:04:22 Sunday
登录
文章检索 我的文章 写文章
如何在C++中开启线程
2023-07-04 23:42:29 深夜i     --     --
C++ 线程 开启 多线程 并发编程

在C++中开启线程是一件非常常见的任务。线程是一个轻量级的执行单元,可以在同一个进程内同时执行多个任务,提高程序的并发性,从而提升整个程序的性能。在C++中,可以通过以下方式来开启线程。

第一种方式:使用 C++ 线程库

C++ 线程库是C++11引入的新标准库之一,该库提供了一组类和函数,允许开发者轻松创建和控制线程。使用该库开启线程可以分为以下几个步骤:

1. 包含头文件:

开启线程前,我们需要包含相应的头文件。需要注意的是,在使用线程库之前,需要确保编译器支持 C++11。


#include <iostream>

#include <thread>

2.编写函数:

在开启线程之前,我们需要先定义一个函数,然后将其用作线程执行的实体。


void threadFn() {

  std::cout << "Hello Thread!\n";

}

3. 创建线程对象:

线程对象可以通过类std::thread来创建,创建线程的方式是将线程实体作为std::thread对象的构造函数参数。


std::thread threadObj(threadFn);

4. 等待线程结束

创建完线程后,需要等待线程执行完毕,否则主程序会立即结束,从而导致线程无法完整执行。可以通过调用std::thread::join()函数来等待线程结束。


threadObj.join();

完整的代码示例如下:


#include <iostream>

#include <thread>

void threadFn() {

  std::cout << "Hello Thread!\n";

}

int main() {

  std::thread threadObj(threadFn);

  threadObj.join();

  std::cout << "Exiting Main\n";

  return 0;

}

第二种方式:使用POSIX线程库

除了C++线程库之外,C++还提供了一种基于POSIX标准的线程库,该库使用比较复杂,但是可以在Linux、Unix等系统中使用。以下是使用POSIX线程库创建线程的示例代码:


#include <iostream>

#include <pthread.h>

void *threadFn(void *arg) {

  std::cout << "Hello Thread!\n";

  return NULL;

}

int main() {

  pthread_t myThread;

  if (pthread_create(&myThread, NULL, threadFn, NULL) != 0) {

    std::cerr << "Error: Failed to create thread.\n";

    return 1;

  }

  if (pthread_join(myThread, NULL) != 0) {

    std::cerr << "Error: Failed to join thread.\n";

    return 1;

  }

  std::cout << "Exiting Main\n";

  return 0;

}

以上就是在C++中开启线程的两种方法。无论使用C++线程库还是POSIX线程库,都需要确保程序可以正确地创建、控制和等待线程的运行,以免影响整个程序的稳定性和性能。

  
  

评论区

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