C++11创建线程

本文介绍了C++11中如何创建线程,包括通过函数、类对象和lambda表达式的方式,并强调了线程创建的原则,如避免在main函数前启动线程,建议在初始化阶段完成线程创建。
摘要由CSDN通过智能技术生成

线程创建

在c++11中引入头文件#include(C++11的标准库中提供了多线程库),该头文件中定义了thread类
创建一个线程即实例化一个该类的对象,实例化对象时候调用的构造函数需要传递一个参数,该参数就是函数名,thread th1(proc1);
如果传递进去的函数本身需要传递参数,实例化对象时将这些参数按序写到函数名后面,thread th1(proc1,a,b);
只要创建了线程对象(传递“函数名/可调用对象”作为参数的情况下),线程就开始执行(std::thread 有一个无参构造函数重载的版本,不会创建底层的线程)。

线程的创建原则

  1. 程序库不应该在未提前告知的情况下创建自己的背景线程
  2. 尽量用相同的方式创建线程
  3. 进入main函数之前不应该启动线程
  4. 程序中线程的创建最好能在初始化阶段全部完成。

如何创建线程

  1. 通过函数
  2. 通过类对象创建线程
  3. 通过lambda表达式创建线程
#pragma once
#include <iostream>
#include <thread>

using namespace std;
//thread:标准库的类
//join:阻塞主线程并等待
//detach(): 将主线程和子线程完全分离,子线程会驻留在后台运行,被C++运行时库接管,失去控制
//joinable():判断是否可以成功使用join()或者detach()
//程序说明:detach后不能在实施join
namespace CThread
{
   
	void myPrint()
	{
   
		cout << "函数线程开始运行" << endl;
		cout << "函数线程运行结束了" << endl;
	}

	class<
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++11中,创建线程非常容易。使用`std::thread`类,你可以创建一个新的线程并将其与一个可调用对象(比如函数指针、成员函数指针或lambda表达式)绑定。 下面是一个简单的示例: ```c++ #include <iostream> #include <thread> void myThreadFunc(int arg) { std::cout << "Hello from thread! Argument: " << arg << std::endl; } int main() { int myArg = 42; std::thread myThread(myThreadFunc, myArg); // 等待线程结束 myThread.join(); return 0; } ``` 在这个示例中,我们定义了一个名为“myThreadFunc”的函数,它接受一个整数参数并在控制台上输出一条消息。然后,在main函数中,我们创建了一个新的线程,将“myThreadFunc”函数和一个整数参数绑定到它上面。我们使用“join”函数等待线程执行完毕。 你也可以使用lambda表达式来创建线程: ```c++ #include <iostream> #include <thread> int main() { int myArg = 42; std::thread myThread([&myArg](){ std::cout << "Hello from thread! Argument: " << myArg << std::endl; }); // 等待线程结束 myThread.join(); return 0; } ``` 在这个示例中,我们创建了一个lambda表达式,它捕获了“myArg”变量,并在控制台上输出一条消息。然后,我们将这个lambda表达式绑定到一个新的线程上,并使用“join”函数等待线程执行完毕。 需要注意的是,创建线程可能会抛出异常,因此你需要使用try-catch块来捕获它们。另外,如果你忘记调用“join”函数,程序可能会崩溃,因为线程可能会在程序结束之前继续运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值