编程之美 1.1 Windows控制CPU占有率

2023-11-20 16:59

本文主要是介绍编程之美 1.1 Windows控制CPU占有率,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.1 让CPU占有率听你指挥
题目:Windows环境下,写一个程序控制CPU占有率,具体
  1. CPU的占有率固定在50%,为一条直线。
  2. CPU占有率为一条直线,具体参数可调。
  3. CPU占有率呈一条正弦曲线。
解题思路:
  1. 任务监控器下CPU占有率是1秒进行一次采样的。让CPU工作指定时间,休息指定时间就可以控制占有率曲线。
  2. 其中指定休息时间可以使用Sleep()函数,工作指定时间则需要计算。在此使用GetTickCount()。
  3. 对于现在电脑都是多核的情况,需要指定某个CPU运行程序,使用API SetThreadAffinityMask()。
CPU占有率为一条直线,具体参数可调。源码:
void setCpuUse(int use)
{int workTime = use;int idleTime = 100- workTime;DWORD startTime;while (1){startTime = GetTickCount();while (GetTickCount() - startTime <= workTime);Sleep(idleTime);}
}int main()
{SetThreadAffinityMask(GetCurrentThread(), 6);setCpuUse(20);return 0;
}
CPU占有率呈一条正弦曲线,源码:
int main()
{SetThreadAffinityMask(GetCurrentThread(), 8);const int SampleCount = 200; // 抽样点数量const double PI = 3.141592653; //πconst int ToTAL_AMPLITUDE = 100; // 每个点对于总时间片const int amplitude = ToTAL_AMPLITUDE / 2; //三角函数振幅DWORD busySpan[SampleCount];for (int i = 0; i < SampleCount; ++i){busySpan[i] = ToTAL_AMPLITUDE / 2 + amplitude * sin(i / (double)(SampleCount - 1) * 2 * PI);}DWORD startTime;for (int j = 0;; j = (j + 1) % SampleCount){startTime = GetTickCount();while (GetTickCount() - startTime <= busySpan[j]);Sleep(ToTAL_AMPLITUDE - busySpan[j]);}
}

在这里插入图片描述

总结:用到的API

GetTickCount();
功能:返回系统开机以来运行的毫秒数。

BOOL WINAPI GetLogicalProcessorInformation(Out_writes_bytes_to_opt(*ReturnedLength, *ReturnedLength) PSYSTEM_LOGICAL_PROCESSOR_INFORMATION Buffer, Inout PDWORD ReturnedLength);
功能:获取处理器信息。

WINAPI SetThreadAffinityMask(In_ HANDLE hThread,In DWORD_PT dwThreadAffinityMask);
功能:设置某个线程运行在某个CPU上,dwThreadAffinityMask为CPU掩码,具体对应关系可以自己尝试。

这篇关于编程之美 1.1 Windows控制CPU占有率的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/396082

相关文章

Springboot控制反转与Bean对象的方法

《Springboot控制反转与Bean对象的方法》文章介绍了SpringBoot中的控制反转(IoC)概念,描述了IoC容器如何管理Bean的生命周期和依赖关系,它详细讲解了Bean的注册过程,包括... 目录1 控制反转1.1 什么是控制反转1.2 SpringBoot中的控制反转2 Ioc容器对Bea

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

MySQL的cpu使用率100%的问题排查流程

《MySQL的cpu使用率100%的问题排查流程》线上mysql服务器经常性出现cpu使用率100%的告警,因此本文整理一下排查该问题的常规流程,文中通过代码示例讲解的非常详细,对大家的学习或工作有一... 目录1. 确认CPU占用来源2. 实时分析mysql活动3. 分析慢查询与执行计划4. 检查索引与表

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同

在 Windows 上安装 DeepSeek 的完整指南(最新推荐)

《在Windows上安装DeepSeek的完整指南(最新推荐)》在Windows上安装DeepSeek的完整指南,包括下载和安装Ollama、下载DeepSeekRXNUMX模型、运行Deep... 目录在www.chinasem.cn Windows 上安装 DeepSeek 的完整指南步骤 1:下载并安装

Spring IOC控制反转的实现解析

《SpringIOC控制反转的实现解析》:本文主要介绍SpringIOC控制反转的实现,IOC是Spring的核心思想之一,它通过将对象的创建、依赖注入和生命周期管理交给容器来实现解耦,使开发者... 目录1. IOC的基本概念1.1 什么是IOC1.2 IOC与DI的关系2. IOC的设计目标3. IOC

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用