首页 > 编程语言 >C++ Thread 基础使用

C++ Thread 基础使用

时间:2023-10-03 16:33:05浏览次数:41  
标签:Thread thread 基础 C++ 线程 include

C++11 Thread 使用

基础用法

  1. 头文件
  • #include<thread>
  1. 函数
  • 初始化
    • thread thread(<function_name>);
  • 线程分离
    • thread.detach();
  • 线程阻塞
    • thread.join()
  • 线程取消
    • this_thread::yield();
  • 线程休眠
    • this_thread::sleep_for(chrono::seconds(3));

代码

#include <iostream>
#include <thread>
#include <string>

using namespace std;

void proc()
{
    cout << "Sub Thread proc" << endl;
}

void proc_1(int a)
{
    cout << "Sub Thread proc 1 and a : " << a << endl;
}

void proc_2(int a, int b)
{
    string msg = "Sub Thread proc 2 and a : " + to_string(a) + " b : " + to_string(b);
    cout << msg << endl;
}

void proc_cancel()
{
    cout << "Cancel current thread" << endl;
    this_thread::yield();
}

void proc_wait_time()
{
    cout << "wait 1s to exec" << endl;
    return;
}

int main()
{
	// thread initilization
    thread thread1(proc);
    thread thread2(proc_1, 10);
    thread thread3(proc_2, 20, 30);

    cout << "Main Thread" << endl;

    // 在线程销毁前必须设置该线程是以何种方式等待线程的结束
    // 是主线程等待子线程的返回,也就是 join
    // 还是子线程运行结束后直接销毁资源,也就是 detach
# if 0
    thread1.join();
    thread2.join();
    thread3.join();
#else
    thread1.detach();
    thread2.detach();
    thread3.detach();
#endif 

    // get self id
    thread::id thread_id = this_thread::get_id();

    // sleep
    this_thread::sleep_for(chrono::seconds(3));

    // cancel thread
    thread thread4(proc_cancel);
	// thread detach
    thread4.detach();

    thread thread5(proc_wait_time);
	// thread join
    thread5.join();

    return 0;
}

标签:Thread,thread,基础,C++,线程,include
From: https://www.cnblogs.com/wanghao-boke/p/17741263.html

相关文章

  • 【STM32基础 CubeMX】ADC的基础使用
    @TOC前言在嵌入式系统开发中,STM32系列微控制器是广泛应用的一种硬件平台,而STMicroelectronics提供的CubeMX工具则是一款强大的开发工具,能够显著简化STM32微控制器的配置和初始化过程。其中,ADC(模数转换器)是STM32微控制器中一个重要的外设,用于将模拟信号转换为数字信号。本文将介绍AD......
  • C++特种成员函数生成机制及相关原则
    C++特种成员函数生成机制及相关原则注:默认C++标准是C++11及以后的标准,因为C++11之前的标准定义的默认成员函数不包含移动构造函数和移动赋值运算符1.C++默认成员函数默认成员函数的定义:类中没有显示声明,在需要时由编译器自动生成的函数,包括默认构造函数、默认析构函数、......
  • 基于hash_table对STL unordered系列容器的封装 #C++
    概述本文对hash_table进行封装,以模仿SGISTL对unordered系列容器进行简单实现,旨在加深对C++封装与泛型技法的体会与理解。阅读本文之前,建议先对哈希表进行学习。unordered_map与map一样,unordered_map的所有元素类型都是pair,pair的第一个成员为Key,第二个成员为Value。因为Key在任何......
  • 第8期ThreadX视频教程:应用实战,将裸机工程移植到RTOS的任务划分,驱动和应用层交互,中断DM
    视频教程汇总帖:https://www.armbbs.cn/forum.php?mod=viewthread&tid=110519 这个是我们初学RTOS面临的最直接问题,很多时候,简单的RTOS机制明白了,API也会调用了,就是添加到RTOS后,总感觉那里不对劲,怎么使用才是正确姿势。针对这些问题,本期视频教程,我们ThreadX内核教程穿插一期实......
  • [Резюме] 基础数列分块
    Preface分块可以\(O(n\sqrt{n})\)解决不能用线段树解决的问题,即不能快速合并区间信息的问题,是很多高级算法与数据结构的基础。本篇只是作者基础入门的一些感受,例题为\(\text{LOJ}[6277,6285]\),下一步计划学习莫队算法,这里有学习总结。Content0如何分块?考虑将标准块大小定......
  • C++ 对拍详解 和解读
    对拍是什么#​对拍,是一个比较实用的工具。它能够非常方便地对于两个程序的输出文件进行比较,可以帮助我们实现一些自动化的比较输出结果的问题。​众所周知,几乎每一道编程题目,都会有某种正解能拿到满分;当我们想不出正解时,我们往往可以打暴力代码来获取部分分数。​但是,当我们觉......
  • TypeScript入门到精通——类型系统基础——类型检查
    TypeScript类型系统基础——类型检查  类型检查是检查程序中类型约束是否正确的过程。类型检查既可以在程序编译时进行,即静态类型检查;也可以在程序运行时进行,即动态类型检查。TypeScript支持静态类型检查,JavaScript支持动态类型检查。 为了满足不同用户的需求,TypeScript......
  • C++类内存分布+ Studio工具
    书上类继承相关章节到这里就结束了,这里不妨说下C++内存分布结构,我们来看看编译器是怎么处理类成员内存分布的,特别是在继承、虚函数存在的情况下。工欲善其事,必先利其器,我们先用好VisualStudio工具,像下面这样一步一步来:  先选择左侧的C/C++->命令行,然后在其他选项这里写上......
  • C++ STL快速入门方法
    在数月之前的机试中第一次体验到STL的威力,因为自己本来一直在用C语言做开发,很多数据结构都是自己造的,比如链表、队列等,第一次接触C++STL后发现这些数据结构都已经给我提供好了,我直接拿去调用就好了,真是超级方便。最近的项目中也遇到了STL一些容器,所以现在自己好好总结一下STL中......
  • C++模板元编程(C++ template metaprogramming)
    实验平台:Win7,VS2013Community,GCC4.8.3(在线版) 所谓元编程就是编写直接生成或操纵程序的程序,C++模板给C++语言提供了元编程的能力,模板使C++编程变得异常灵活,能实现很多高级动态语言才有的特性(语法上可能比较丑陋,一些历史原因见下文)。普通用户对C++模板的使用可能不是很......