首页 > 其他分享 >线程启动

线程启动

时间:2024-03-24 20:46:08浏览次数:22  
标签:std do task thread 启动 线程 my

 线程在 std::thread 对象创建(为线程指定任务)时启动。 最简单的情况下, 任务也会很简单, 通常是无参数无返回(void-returning)的函数 。

 使用C++线程库启动线程, 可以归结为构造 std::thread 对象: 

void do_some_work();
std::thread my_thread(do_some_work);

为了让编译器识别 std::thread 类, 这个简单的例子也要包含 <thread> 头文件。 如同大多数C++标准库一样, std::thread 可以用可调用( callable) 类型构造, 将带有函数调用符类型的实例传入 std::thread 类中, 替换默认的构造函数。 

class background_task
{
public:
void operator()() const
{
    do_something();
    do_something_else();
}
};
background_task f;
std::thread my_thread(f);

注意: 如果你传递了一个临时变量, 而不是一个命名的变量。 C++编译器会将其解析为函数声明, 而不是类型对象的定义。 

std::thread my_thread(background_task());

这里相当与声明了一个名为my_thread的函数, 这个函数带有一个参数(函数指针指向没有参数并返回background_task对象的函数), 返回一个 std::thread 对象的函数, 而非启动了一个线程。

使用多组括号①, 或使用新统一的初始化语法②, 可以避免这个问题。 

std::thread my_thread((background_task())); // 1
std::thread my_thread{background_task()}; // 2

 使用lambda表达式也能避免这个问题。 

std::thread my_thread([]{
    do_something();
    do_something_else();
});

 

标签:std,do,task,thread,启动,线程,my
From: https://www.cnblogs.com/love-9/p/18092984

相关文章

  • 简易的取款多线程
    首先建立一个classAccount类,设置全局变量money,这个变量会被所有的线程使用。设置条件。classAccount{publicstaticintmoney=3000;//建立全局变量publicsynchronizedvoidtaking(intm){if(m>money){System.out.println("余额不足");}else{System.out.pr......
  • JAVAEE——多线程的设计模式,生产消费模型,阻塞队列
    文章目录多线程设计模式什么是设计模式单例模式饿汉模式懒汉模式线程安全问题懒汉模式就一定安全吗?锁引发的效率问题jvm的优化引起的安全问题阻塞队列阻塞队列是什么?生产消费者模型阻塞队列实现消费生产者模型可能遇到的异常多线程设计模式什么是设计模式首先我......
  • (Service)服务启动流程分析(Android 10.0)
    (Service)服务启动流程分析,AMS内保活服务(Android10.0)frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.javaframeworks/base/services/core/java/com/android/server/am/ActiveServices.javaframeworks/base/core/java/android/app/Contex......
  • Grafana源码启动
    Grafana源码启动因为项目用到Grafana,但是用iframe嵌入前端。想研究一下源码看有没有可能直接用组件嵌入,然后用API调用Grafana的服务。GrafanabackendGrafana的后端服务是用Go写的,新语言,有待学习。Grafanafrontend前端使用React、Angular编写的Typescript项目。框架没学习过......
  • 【C++】Linux多线程开发
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录3.1线程概述3.2创建线程3.3、线程终止3.4连接已经终止线程3.5线程的分离3.6线程取消3.7线程属性3.8线程同步3.9互斥锁3.10死锁3.11读写锁3.12生产者和消费者模型3.13条件......
  • PhpStrom启动报错, java.net.BindException: Address already in use: bind
    问题描述:今天启动phpstromIDE时,突然报错,报错信息如下图:问题分析1.不正确关闭应用(强制关闭):可能是之前启动了一个本地web服务占了端口,在没有停掉服务,直接关闭IDE导致的(尝试了重启电脑也没解决)2.其他应用占用端口:安装了Hyper-V导致端口被占用?显然我的是第一种情况问题解决......
  • Windows 服务启动共享目录
    privatevoidFormMain_Load(objectsender,EventArgse){ShareDirec();}publicvoidShareDirec(){ManagementClassmanagement=newManagementClass("Win32_share");ManagementBaseObjectinParams=management.GetMethodParameters(&qu......
  • Java面试题:用Java并发工具类,实现一个线程安全的单例模式;使用Java并发工具包和并发框架
    面试题一:设计一个Java并发工具类,实现一个线程安全的单例模式,并说明其工作原理。题目描述:请设计一个Java并发工具类,实现一个线程安全的单例模式。要求使用Java内存模型、原子操作、以及Java并发工具包中的相关工具。考察重点:对Java内存模型的理解。对Java并发工具包的了......
  • Linux线程互斥
    文章目录Linux线程互斥mutex接口初始化互斥量销毁互斥量加锁和解锁加锁解锁的原理使用示例Linux线程互斥进程线程间的互斥相关背景概念临界资源:多线程执行流共享的资源就叫做临界资源临界区:每个线程内部,访问临界资源的代码,就叫做临界区互斥:任何时刻,互斥保证有......
  • ftp多线程下载工具
    //代码类似https多线程下载,整体实现逻辑类似,区别比较大的是curl_opt的相关参数设置不一样#include<iostream>#include<fstream>#include<curl/curl.h>#include<pthread.h>#include<sys/mman.h>#include<sys/stat.h>#include<fcntl.h>#include<sys......