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

编程入门 行业动态 更新时间:2024-10-06 14:23:03

编程<a href=https://www.elefans.com/category/jswz/34/1764446.html style=之美 1.1 Windows控制CPU占有率"/>

编程之美 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占有率

本文发布于:2024-02-13 09:36:56,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1758139.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:之美   占有率   Windows   CPU

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!