当前位置:  开发笔记 > 编程语言 > 正文

编写代码以使CPU使用率显示正弦波

如何解决《编写代码以使CPU使用率显示正弦波》经验,为你挑选了3个好方法。

Windows中的线程时间片是40ms,即iirc,因此这可能是一个很好的数字,可用作100%标记.

unsigned const TIME_SLICE = 40;
float const PI = 3.14159265358979323846f;
while(true)
{
    for(unsigned x=0; x!=360; ++x)
    {
        float t = sin(static_cast(x)/180*PI)*0.5f + 0.5f;
        DWORD busy_time = static_cast(t*TIME_SLICE);
        DWORD wait_start = GetTickCount();
        while(GetTickCount() - wait_start < busy_time)
        {
        }
        Sleep(TIME_SLICE - busy_time);    
    }
}

这将给出大约14秒的时间段.显然,这假设系统中没有其他重要的CPU使用,并且您只在单个CPU上运行它.这些都不是真的那么普遍.



1> flodin..:

Windows中的线程时间片是40ms,即iirc,因此这可能是一个很好的数字,可用作100%标记.

unsigned const TIME_SLICE = 40;
float const PI = 3.14159265358979323846f;
while(true)
{
    for(unsigned x=0; x!=360; ++x)
    {
        float t = sin(static_cast(x)/180*PI)*0.5f + 0.5f;
        DWORD busy_time = static_cast(t*TIME_SLICE);
        DWORD wait_start = GetTickCount();
        while(GetTickCount() - wait_start < busy_time)
        {
        }
        Sleep(TIME_SLICE - busy_time);    
    }
}

这将给出大约14秒的时间段.显然,这假设系统中没有其他重要的CPU使用,并且您只在单个CPU上运行它.这些都不是真的那么普遍.



2> jfs..:

这是在Python中略微修改的@ flodin解决方案:

#!/usr/bin/env python
import itertools, math, time, sys

time_period = float(sys.argv[1]) if len(sys.argv) > 1 else 30   # seconds
time_slice  = float(sys.argv[2]) if len(sys.argv) > 2 else 0.04 # seconds

N = int(time_period / time_slice)
for i in itertools.cycle(range(N)):
    busy_time = time_slice / 2 * (math.sin(2*math.pi*i/N) + 1)
    t = time.clock() + busy_time
    while t > time.clock():
        pass
    time.sleep(time_slice - busy_time);    

可以使用time_periodtime_slice参数微调CPU曲线.



3> Neil N..:

好吧,我有一个与我的第一个答案不同的,可能更好的解决方案.

而不是试图操纵CPU,而是挂钩到任务管理器应用程序,强制它绘制你想要的,而不是CPU结果.接管绘制图形等的GDI对象.排序"作弊",但他们没有说你必须操纵CPU

甚至可以从获取CPU%的任务管理器挂钩调用,而是返回正弦结果.


这说明了不良要求(太笼统,解释空间)和强烈要求(具体和具体)之间的差异.并且......在盒子里和开箱即用之间思考的区别.
推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有