首页 > 编程语言 >c++ 可以检测线程是否销毁的thread_guard

c++ 可以检测线程是否销毁的thread_guard

时间:2023-02-11 20:46:17浏览次数:43  
标签:thread int ll c++ guard alive func 检测线

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 1e2, Q = N;
using ll = long long;
int n, q;
ll a[N];
int sta[N];
struct q_t{
	int l, r;
}que[Q];
ll res[N];
ll query(int l, int r){
	ll sum = 0;
	for(ll i = l ;i <= r; ++i) sum += a[i];
	return sum;
}
void make_query(int id){
	res[id] = query(que[id].l, que[id].r);
	std :: this_thread :: sleep_for(chrono :: milliseconds(50));
}
struct thread_guard{
	thread thr;
	bool alive;
	template<typename Ftp>
	thread_guard(const Ftp& func_){
		static auto func = func_;
		static auto func1 = [&](bool& myvis){
			func();
			myvis = false;
		};
		alive = true;
		thr = thread(func1, std::ref(alive));
	}
	~thread_guard(){
		if(thr.joinable()) thr.join();
	}
	bool is_alive()const{
		return alive;
	}
};
int main(){
	ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
	cin >> n >> q;
	for(int i = 1; i <= n; ++i){
		cin >> a[i];
	}
	for(int i = 1; i <= q; ++i){
		cin >>que[i].l >> que[i].r;
	}
	int id = 1;
	thread_guard thr( std::move(bind(make_query, 1)));
	cout << thr.is_alive() << endl;
	std :: this_thread :: sleep_for(chrono :: milliseconds(150));
	cout << thr.is_alive() << endl;
	return 0;
}

标签:thread,int,ll,c++,guard,alive,func,检测线
From: https://www.cnblogs.com/cdsidi/p/17112508.html

相关文章

  • C++ 调用 Python 总结(一)
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。前置说明  本文作为本人csdnblog的主站的备份。(BlogID......
  • C++11 中运行代码块耗时的方法以及坑(chrono 方法)
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。前置说明  本文作为本人csdnblog的主站的备份。(BlogID......
  • 关于C++ 多态实现技术的深度解析(vfptr,vftable)
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。前置说明  本文作为本人csdnblog的主站的备份。(BlogID......
  • GCC&&G++ C && C++ 内嵌汇编和调用汇编函数的方法(x86,ARM自己对照改)
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。前置说明  本文作为本人csdnblog的主站的备份。(BlogID......
  • c++登录注册功能实现代码
    //ConsoleApplication26.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。////#define_CRT_SECURE_NO_WARNINGS#define_CRT_NONSTDC_NO_DEPRECATE#includ......
  • C++ 地球人口承载力
    题目描述假设地球上的新生资源按恒定速度增长。照此测算,地球上现有资源加上新生资源可供xx亿人生活aa年,或供yy亿人生活bb年。为了能够实现可持续发展,避免资源枯......
  • c++ 调用第三orm框架matador的方法通过vs2019
    1.安装matador编译好window版安装包,在安装目录下复制include和lib文件夹到自己的项目目录一下2.自己的mfc目录如图所示,粘贴制include和lib文件夹 3.用vs2019打开自己......
  • C++语言程序设计课程设计任务书[2023-02-11]
    C++语言程序设计课程设计任务书[2023-02-11]C++语言程序设计课程设计任务书一.课程设计的目的全面系统的学习面向对象程序设计的基本概念、基本语法和编程方法。正确......
  • C++PrimerPlus中文第六版第10章编程练习答案
    1、//bankaccount.h#ifndefBANKACCOUNT_H_#defineBANKACCOUNT_H_#include<string>classBankAccount{private: std::stringm_account_name; constchar*m_......
  • c++ well-formed
    这里用一个lambda来作为sharedptr的删除器,lambda没有做任何操作,保证这份数据的内存管理不受这个sharedptr影响。编译器报错:staticassertionfailedduetorequirement......