C++创建线程的三种方式

这篇具有很好参考价值的文章主要介绍了C++创建线程的三种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C++创建线程的三种方式

早期的C++并不支持多线程的创建,如果要创建多线程,依赖的是系统提供的一些方法(例如linux的 pthread). 从C++11以后开始,提供了std::thread线程库,因此我们可以创建std::thread类对象的方式来创建线程。创建的方式主要有三种:

创建线程的三种方式:

  • 通过函数指针
  • 通过函数对象
  • 通过lambda函数

使用std::thread类创建对象,必须包含头文件

#include <thread>

创建的形式是

std::thread thobj(<CALL_BACK>)

新线程将在创建新对象后立即启动,并将与启动该线程的线程并行执行传递的回调。而且,任何线程都可以通过在该线程的对象上调用join()函数来等待另一个线程退出。

通过函数指针创建线程

#include <iostream>
#include <thread>
#include <chrono>

using namespace std;

void thread_func()
{
	for(int i= 0; i< 10; ++i)
	{
		cout<<" thread thread_func is running..."<< endl;
		std::this_thread::sleep_for(std::chrono::seconds(1));
	}
}

int main()
{
	 thread threadobj(thread_func);
	cout<<"main Thread is running..."<<endl;
	
	threadobj.join();
	cout<<" exit from main Thread"<<endl;

	return 0;
}

需要注意的是, thread threadobj(thread_func), 函数名是不加括号的。

通过函数对象创建线程

#include <iostream>
#include <thread>
#include <chrono>

using namespace std;

class Thread_Test
{
public:
	void operator()()
	{
		for(int i = 0; i < 10; i++)
		{
			cout<<" Thread_Test is running..."<<endl;
			std::this_thread::sleep_for(std::chrono::seconds(1));
		}
	}	
};

int main()
{
	thread threadobj((Thread_Test()));
	cout<<"main Thread is running..."<<endl;
	
	threadobj.join();
	cout<<" exit from main Thread"<<endl;

	return 0;
}

与上面的方法对比,此处对象Thread_Test()是必须要加括号的.关于operator() 函数对象(仿函数)的相关知识不在这里展开。文章来源地址https://www.toymoban.com/news/detail-589229.html

lambda函数创建线程

#include <iostream>
#include <thread>
#include <chrono>

using namespace std;
int main()
{
	cout<<"main Thread is running..."<<endl;
	thread threadobj([]{
		for (int i = 0; i < 10; i++)
		{
			cout<<"lambda thread is running ..." <<endl;
			::this_thread::sleep_for(::chrono::seconds(1));
		}
	});

	threadobj.join();
	cout<<" exit from main Thread"<<endl;

	return 0;
}

到了这里,关于C++创建线程的三种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c++中 遍历map的三种方式

    运行结果: 方式一: key:0 value:aaa key:1 value:bbb key:2 value:ccc 方式二: key:0 value:aaa key:1 value:bbb key:2 value:ccc 方式三: key:0 value:aaa key:1 value:bbb key:2 value:ccc

    2024年02月13日
    浏览(43)
  • C++ 参数的三种传递方式和应用参加

    C++ 参数的三种传递方式分别是 值传递 、 指针传递 和 引用传递 。 值传递 值传递的实质 将实参的值(a、b)复制到形参(m、n)相应的存储单元中,即形参和实参分别占用不同的存储单元。 值传递的特点 值传递的特点是单向传递,即主调函数被调用时给形参分配存储单元,把

    2024年02月08日
    浏览(35)
  • C++入门学习(三十)一维数组的三种定义方式

    数组是什么? 数组(Array)是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处

    2024年02月19日
    浏览(46)
  • 【C++的奇迹之旅(二)】C++关键字&&命名空间使用的三种方式&&C++输入&输出&&命名空间std的使用惯例

    C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式 等。熟悉C语言之后,对C++学习有一定的帮助,本章节主要目标: 补充C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的,比如:作用 域方面、IO方面、函数方面、

    2024年04月09日
    浏览(88)
  • Java 创建多线程的三种方法

    在Java中创建多线程,往往都要通过Thread类来实现,今天学习下Java中创建多线程的三种方法[1]。 通过继承 Thread类 实现多线程。 主要方法: 1.void run(), 线程开启后,方法将被调用执行 2.void start(), 使此线程开始执行, Java虚拟机会调用run()方法 实现步骤: 1.定义类,继承 Thread类

    2024年02月05日
    浏览(57)
  • Java 多线程实现的三种方式

    Java 多线程实现方式主要有三种:继承 Thread 类、实现 Runnable 接口、使用 ExecutorService、Callable、Future 实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。 1、继承 Thread 类实现多线程 继承 Thread 类的方法尽管被我列为一种多线程

    2023年04月27日
    浏览(54)
  • Java 实现多线程的三种方式

    1、三种方法的介绍和比较 1、1三种方式得介绍 1、继承Thread类 2、实现Runnable接口 3、实现Callable接口 1、2三种方法的介绍和比较 1、2、1、实现Runnable接口相比继承Thread类有如下优势 1、增强程序的健壮性,将业务逻辑与线程调度分离 2、线程池只能放入实现Runable或Callable类线程

    2024年02月02日
    浏览(47)
  • Springboot中使用线程池的三种方式

    前言 多线程是每个程序员的噩梦,用得好可以提升效率很爽,用得不好就是埋汰的火葬场。 这里不深入介绍,主要是讲解一些标准用法,熟读唐诗三百首,不会作诗也会吟。 这里就介绍一下springboot中的多线程的使用,使用线程连接池去异步执行业务方法。 由于代码中包含详

    2024年02月08日
    浏览(46)
  • Spring 创建 Bean 的三种方式

    在使用 Spring 框架后,对象以 Bean 的形式统一交给 IOC 容器去创建和管理。现阶段主流的方式是基于 SpringBoot 框架,基于注解的方式实现 Bean 的创建,但在原生 Spring 框架中其实存在三种创建 Bean 的方式。 BeanProcess 实体类,虽然加了 @Component 等三个注解,但只在注解方式创建

    2024年02月14日
    浏览(53)
  • Java创建文件的三种方式

    内容来自于韩顺平学Java 在学习其视频下跟着编写 文件创建成功

    2024年04月11日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包