21xrx.com
2024-11-10 00:30:41 Sunday
登录
文章检索 我的文章 写文章
C++如何启动线程?
2023-07-01 17:45:10 深夜i     --     --
C++ 线程 启动

C++是一种面向对象的编程语言,它支持多线程开发。在C++中,启动线程可以使用多种方法,包括使用标准库函数、使用操作系统提供的函数和使用第三方库。

一、使用标准库函数

在C++11标准中,引入了thread头文件,其中定义了std::thread类,可以方便地启动新线程。

下面是一个简单的例子:


#include <iostream>

#include <thread>

void func(int n)

n = " << n << std::endl;

int main()

{

  std::thread t(func, 10);

  t.join();

  return 0;

}

这里定义了一个函数func,它接收一个整数参数n,打印出该参数的值。在主函数中,启动了一个新线程t,传入func函数和参数10。接着,使用t.join()等待该线程结束。

二、使用操作系统提供的函数

除了使用标准库函数,也可以使用操作系统提供的函数启动线程。例如,在Windows系统中可以使用CreateThread函数,如下所示:


#include <iostream>

#include <Windows.h>

DWORD WINAPI func(LPVOID lpParameter)

{

  int n = *(int*)lpParameter;

  std::cout << "In thread, n = " << n << std::endl;

  return 0;

}

int main()

{

  int n = 10;

  HANDLE hThread = CreateThread(NULL, 0, func, &n, 0, NULL);

  WaitForSingleObject(hThread, INFINITE);

  CloseHandle(hThread);

  return 0;

}

这里定义了一个函数func,它接收一个指向整数的指针参数lpParameter,将该指针转换为整数n,并打印出该参数的值。在主函数中,启动了一个新线程hThread,传入func函数和指向n的指针。接着,使用WaitForSingleObject函数等待该线程结束,然后关闭句柄。

三、使用第三方库

除了使用标准库函数和操作系统提供的函数,也可以使用第三方库来启动线程。例如,在Boost库中,可以使用boost::thread类,如下所示:


#include <iostream>

#include <boost/thread.hpp>

void func(int n)

n = " << n << std::endl;

int main()

{

  boost::thread t(func, 10);

  t.join();

  return 0;

}

这里定义了一个函数func和一个boost::thread对象t,与使用std::thread类非常相似。不过需要注意的是,Boost库需要单独安装和链接。

总结

C++支持多线程开发,可以使用标准库函数、操作系统提供的函数和第三方库来启动线程。无论使用哪种方法,都需要注意线程安全和资源分配,以避免问题发生。

  
  

评论区

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