C++模拟操作系统睡眠机制

news2024/9/22 17:36:47
在系统中定义一个变量bHiberable,如果是3分钟内休眠,那么每隔3分钟检测一次这个变量,如果为真,则进入睡眠,如果是假,就把这个标志设置为真。继续等待和检测。
程序阻止操作系统休眠的办法:操作系统系统对外提供API,程序每调用一次API,就将bHiberable标志设置为假,可以阻止系统的休眠。

为了避免和我一样的人的误解,这是我想出来的操作系统睡眠机制。真正阻止Windows系统睡眠使用到windows.h的SetThreadExecutionState 系统API,并且我不知道真正的windows系统的睡眠机制。
一个系统类实现睡眠功能

class System{
public:
	System(){
		iWaitTimeMS = 3000;
	}
	static void do_not_hibernate(){
		bHiberable = false;
	}
	void start(){
		thread t(&System::try_hibernate, this);
		t.detach();
	}
	void try_hibernate(){
		while(1){
			this_thread::sleep_for(std::chrono::milliseconds(iWaitTimeMS));
			cout<<"System:尝试睡眠:";
			if(bHiberable){
				cout<<"进入睡眠状态。"<<endl;
				break;
			}else{
				cout<<"不能睡眠。"<<endl;
				bHiberable = true;
			}
		}
	}

	static bool bHiberable;
private:
	int iWaitTimeMS;
};
bool System::bHiberable = true;

程序类会在运行期间阻止系统睡眠

class Program123{
public:
	void run(){
		this_thread::sleep_for(std::chrono::milliseconds(2000));
		cout<<"Program:阻止系统睡眠。"<<endl;
		System::do_not_hibernate();
		this_thread::sleep_for(std::chrono::milliseconds(2000));
		cout<<"Program:阻止系统睡眠。"<<endl;
		System::do_not_hibernate();
		this_thread::sleep_for(std::chrono::milliseconds(2000));
		cout<<"Program:阻止系统睡眠。"<<endl;
		System::do_not_hibernate();
		this_thread::sleep_for(std::chrono::milliseconds(2000));
		cout<<"Program:阻止系统睡眠。"<<endl;
		System::do_not_hibernate();
		this_thread::sleep_for(std::chrono::milliseconds(2000));
		cout<<"Program:阻止系统睡眠。"<<endl;
		System::do_not_hibernate();
	}
};

完整代码

#include <iostream>
#include <thread>

using namespace std;

class System{
public:
	System(){
		iWaitTimeMS = 3000;
	}
	static void do_not_hibernate(){
		bHiberable = false;
	}
	void start(){
		thread t(&System::try_hibernate, this);
		t.detach();
	}
	void try_hibernate(){
		while(1){
			this_thread::sleep_for(std::chrono::milliseconds(iWaitTimeMS));
			cout<<"System:尝试睡眠:";
			if(bHiberable){
				cout<<"进入睡眠状态。"<<endl;
				break;
			}else{
				cout<<"不能睡眠。"<<endl;
				bHiberable = true;
			}
		}
	}

	static bool bHiberable;
private:
	int iWaitTimeMS;
};
bool System::bHiberable = true;
class Program123{
public:
	void run(){
		this_thread::sleep_for(std::chrono::milliseconds(2000));
		cout<<"Program:阻止系统睡眠。"<<endl;
		System::do_not_hibernate();
		this_thread::sleep_for(std::chrono::milliseconds(2000));
		cout<<"Program:阻止系统睡眠。"<<endl;
		System::do_not_hibernate();
		this_thread::sleep_for(std::chrono::milliseconds(2000));
		cout<<"Program:阻止系统睡眠。"<<endl;
		System::do_not_hibernate();
		this_thread::sleep_for(std::chrono::milliseconds(2000));
		cout<<"Program:阻止系统睡眠。"<<endl;
		System::do_not_hibernate();
		this_thread::sleep_for(std::chrono::milliseconds(2000));
		cout<<"Program:阻止系统睡眠。"<<endl;
		System::do_not_hibernate();
	}
};
int main(){
	System s;
	s.start();

	Program123 p123;
	p123.run();

	cin.get();
	return 0;
}

运行测试
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/818879.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git 一篇文章搞懂git (万字长文)

索引 一. Git初识1.提出问题2.什么是版本控制器3.git安装 二. git本地仓库基本操作1.Git本地仓库相关命令2.认识工作区&#xff0c;暂存区&#xff0c;版本库3.第一次Git追踪管理文件4.**有关于打印提交日志的命令**5.验证.git文件的指针指向6.Git管理的再理解——修改7.版本回…

shell 脚本 if 判断使用方法

例如 1&#xff1a; shell if判断条件使用-n参数的使用 if [ -n $1 ] 当str非空的时候&#xff0c;为true if [[ -n $1 ]];then app_version$1 fi $1 不管我们是否传入参数&#xff0c;都是输出app_version$1 这行&#xff0c;也就是结果一直为true 例如 2&#xff1a; net…

CASS7.0裁剪面域图形

1、打开CASS7.0&#xff0c;绘制一个线状闭合图形&#xff0c;如下&#xff1a; 2、然后填充该线状地物&#xff0c;并删除线状地物&#xff0c;仅留下填充好的面域图形。如下&#xff1a; 3、恢复面域图形的边界线&#xff08;选中面域后&#xff0c;鼠标左键双击&#xff0c;…

Pytorch基础

文章目录 一、Pytorch简介二、安装2.1 安装GPU环境2.2 安装Pytorch2.3 测试 三、Tensor3.1 Tensor创建3.1.1 torch.tensor() && torch.tensor([])3.1.2 torch.randn && torch.randperm3.1.3 torch.range(begin,end,step)3.1.4 指定numpy 3.2 Tensor运算3.2.1 A…

mysql 非definer用户如何查看存储过程定义

当我们创建存储过程时&#xff0c;如果没有显示指定definer&#xff0c;则会默认当前用户为该sp的definer&#xff0c;如果没有相关授权&#xff0c;则其他用户是看不了这个sp的。 比如用户zhenxi1拥有如下权限&#xff1a; 它拥有对dev_nacos库的查询权限&#xff0c;这个时候…

流程节点图形变化

一、背景 &#xff08;1&#xff09;流程节点为矩形&#xff0c;只有上下左右四个连接点。 &#xff08;2&#xff09;支持移动&#xff0c;放大缩小&#xff0c;连接线。 二、需求 &#xff08;1&#xff09;流程节点支持图形变化。 &#xff08;2&#xff09;支持节点边框…

第7期ThreadX视频教程:如何实现RTOS高效的任务管理,抢占式调度,时间片调度和零中断延迟(2023-07-31)

视频教程汇总帖&#xff1a;https://www.armbbs.cn/forum.php?modviewthread&tid110519 本期视频为大家分享高效的RTOS任务管理设计&#xff0c;通过这个点来引出抢占式调度&#xff0c;时间片调度&#xff0c;任务优先级设置和零中断延迟。 RTOS任务高效管理是我们使用R…

吃透《西瓜书》第四章 决策树定义与构造、ID3决策树、C4.5决策树、CART决策树

目录 一、基本概念 1.1 什么是信息熵&#xff1f; 1.2 决策树的定义与构造 二、决策树算法 2.1 ID3 决策树 2.2 C4.5 决策树 2.3 CART 决策树 一、基本概念 1.1 什么是信息熵&#xff1f; 信息熵: 熵是度量样本集合纯度最常用的一种指标&#xff0c;代表一个系统中蕴…

Python小红书旋转验证码识别

本周免费接了一个用户的需求&#xff0c;研究了一下小红书旋转验证码。刚开始小瞧了它&#xff0c;觉得它应该没有百度旋转验证码那么难&#xff0c;毕竟图像没有干扰&#xff0c;需要的训练样本就可以很少。然而事情并没有这么简单&#xff0c;所以记录一下。 首先看一下最终…

代码随想录算法训练营第二天| 977. 有序数组的平方y,螺旋矩阵 II,209. 长度最小的子数组

977. 有序数组的平方y 思路&#xff0c;原数组是有序的&#xff0c;但是因为负数平方后可能变无序了&#xff0c;因此利用双指针遍历原数组&#xff0c;比较 nums[left]*nums[left]和nums[right]*nums[right]谁更大&#xff0c;然后对新数组赋值 class Solution {public int…

uni-table行点击事件

uni-app 如何点击表格的行跳转到对应的页面 找到uni-ui的源码&#xff0c;在源码里面绑定事件 用$emit发射事件 在你使用了uni-table的组件中接受改事件 然后绑定调用成功

在中国区部署日志通2.0

前提条件 一个域名&#xff1a;使用此域名来访问日志通控制台提供aws iam 的ssl证书 &#xff0c;而且必须跟域名相关联具有四个子网&#xff08;两个公有子网和两个私有子网&#xff09;和NAT网关的VPC 步骤 1.创建ACM证书 1.1 请求公有证书 1.2 配置域名 1.3 新申请的证书记…

Python自动化测试之函数知识讲解

一、前言 本文章主要讲解Python中的函数定义调用、参数分类、函数使用、作用域以及内置函数等内容&#xff0c;是函数专题讲解&#xff0c;这些都是python自动化学习中的基础哟&#xff0c;只有学好了基础才会有利于后面自动化的学习哟。这里我不多说废话了&#xff0c;直接进入…

GO学习之 多线程(goroutine)

GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 文章目录 GO系列前言一、并发介绍1.1 进程和线程和协程1.2 并发和并行 二、goroutine介绍三…

Android 中 app freezer 原理详解(二):S 版本

基于版本&#xff1a;Android S 0. 前言 在之前的两篇博文《Android 中app内存回收优化(一)》和 《Android 中app内存回收优化(二)》中详细剖析了 Android 中 app 内存优化的流程。这个机制的管理通过 CachedAppOptimizer 类管理&#xff0c;为什么叫这个名字&#xff0c;而不…

HTTP协议 和 HTTPS协议的区别(4点) HTTPS如何使用SSL/TLS协议加密过程 CA证书干啥的

&#xff08;一&#xff09;HTTP协议 和 HTTPS协议的区别&#xff08;4点&#xff09;&#xff1a; 1. HTTP协议的端口号是80&#xff0c; HTTPS协议的端口号是443 2. HTTP协议使用的URL是以 http:// 开头&#xff0c;HTTPS协议使用的URL是以https://开头 3. HTTP协议和HTTP…

Qt 中操作xml文件和JSON字符串

文章目录 1、概述1.1、xml介绍1.2、json介绍 2、xml文件增删改查2.1、写xml文件内容2.2、读xml文件内容2.3、删除xml文件内容2.4、修改xml文件内容 3、构建JSON字符串3.1、JSON字符串排版4、剪切板操作 1、概述 1.1、xml介绍 XML 指可扩展标记语言&#xff08;EXtensible Mark…

“效能指标”,该由谁来定义?| 谈效风生

第5期&#xff1a;效能指标&#xff0c;该由谁来定义&#xff1f; 回顾上期《「自动化」聊起来简单&#xff0c;做起来难》我们聊了聊如何打造「自动化」的事&#xff0c;这也是真正实现研发效能提升的必要条件。从单点自动化提升效率&#xff0c;到全工具链自动化&#xff0c;…

常微分方程建模R包ecode(二)——绘制相速矢量场

本节中我们考虑一个更为复杂的常微分方程模型&#xff0c; d X C d t ν ( X A Y A ) − β ⋅ X C ⋅ ( Y C Y A ) − ( μ g ) ⋅ X C , ( 1 ) d Y C d t β ⋅ X C ⋅ ( Y C Y A ) − ( μ g ρ ) ⋅ Y C , ( 2 ) d X A d t g ⋅ X C − β ⋅ X A ⋅ ( Y C Y A …

2023最新版本~十分钟零基础搭建EMQX服务器

购买服务器 已知服务器大厂商 1 阿里云 点击直接访问 2 华为云点击直接访问 3 腾讯云 点击直接访问 还是比较推荐大公司 不会跑路 这里我购买的是一年的华为云服务器(新用户 64一年) 镜像推荐乌班图18 登陆服务器&#xff08;需要重置密码&#xff01;&#xff01;&…