博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
运行控制[置顶] 有趣的编程----控制自己电脑的CPU
阅读量:5955 次
发布时间:2019-06-19

本文共 2548 字,大约阅读时间需要 8 分钟。

每日一贴,今天的内容关键字为运行控制

    一、目题

    :

    写一个序程,让windows务任管理器中的CPU占用率表现为一条正弦函数曲线

    。

    

    1.  多CPU的解决办法

    

    //让进程在指定理处器上运行(在第一个CPU上运行, 对多CPU的理处) SetProcessAffinityMask( GetCurrentProcess(), 0x00000001 //cpu mask );

    

2. 控制CPU的思绪

    控制

    

    忙

    

    :

    死环循

    。

    控制

    

    闲

    

    :

    就寝

    。

    

    3. 通过算计CPU率频来控制CPU

    

    #include <stdio.h> #include <stdlib.h> #include "windows.h" //控制CPU , 要需算计CPU运行时光 int main() { //让进程在指定理处器上运行(在第一个CPU上运行, 对多CPU的理处) SetProcessAffinityMask( GetCurrentProcess(), 0x00000001 //cpu mask ); for(;;) { //CPU 2.0GHZ 4核心 8线程 //算计方法: 2.0*10的9次方 , 现代CPU每一个时钟期周可以行执2条以上的代码 //2000 000 000*2/5=800 000 000 均平 for(int i=0;i<8000000;i++) ; Sleep(10);//10ms较比近接windows的调度时光片 } //system("PAUSE"); return 0; }

    运行果效:

    

    

    4. 通过GetTickCount()函数来设置时光间隔

    

    #include <stdio.h> #include <stdlib.h> #include "windows.h" //控制CPU int main() { //让进程在指定理处器上运行(在第一个CPU上运行, 对多CPU的理处) SetProcessAffinityMask( GetCurrentProcess(), 0x00000001 //cpu mask ); int busyTime = 100; int idleTime = busyTime; int start = 0; while(true) { //用系统函数省去了CPU运行时光的预算 start = GetTickCount(); while((GetTickCount() - start) <= busyTime) ; //闲暇 Sleep(idleTime); } //system("PAUSE"); return 0; }

    果效:

    

    每日一道理
谁说人与人隔着遥远的重洋,谁说心与心设着坚固的堤防?十六岁的鸟儿飞上天空,总会找到落脚的枝头。

    

    5. 画正弦函数

    

    

    #include <Windows.h> #include <stdlib.h> #include <stdio.h> #include <math.h> #include <tchar.h> const double SPLIT = 0.01; const int COUNT = 200; const double PI = 3.14159265; const int INTERVAL = 300; //间隔时光 //画出一条正弦曲线 int _tmain(int argc, _TCHAR* argv[]) { //让进程在指定理处器上运行(在第一个CPU上运行, 对多CPU的理处) SetProcessAffinityMask( GetCurrentProcess(), 0x00000001 //cpu mask ); //1. 设置忙与闲时的时光数组 DWORD busySpan[COUNT]; //array of busy times DWORD idleSpan[COUNT]; //array of idle times int half = INTERVAL / 2; double radian = 0.0; //弧度 for(int i = 0; i < COUNT; i++) { //sin(x)的取值围范是[-1,1],为了整完表现,必须给它作些参数整调 busySpan[i] = (DWORD)(half + (sin(PI * radian) * half)); idleSpan[i] = INTERVAL - busySpan[i]; radian += SPLIT; //每次增一点点 } //试测:输出忙与闲时的时光数组, 写入文件result.txt FILE *fp; fp = fopen("result.txt", "a+"); //a+示表追加式方 for(int i = 0; i < COUNT; i++) { //printf("busySpan[%d] is %d\n",i,busySpan[i]); //printf("idleSpan[%d] is %d\n\n",i,idleSpan[i]); fprintf(fp, "busySpan[%d] is %d\n" , i, busySpan[i]); fprintf(fp, "idleSpan[%d] is %d\n\n" , i , idleSpan[i]); } fclose(fp); //2. 画曲线 DWORD startTime = 0; int j = 0; while (true) { j = j % COUNT; //COUNT次为一个期周 startTime = GetTickCount(); while ((GetTickCount() - startTime) <= busySpan[j]) ; Sleep(idleSpan[j]); j++; } return 0; }

    运行果效:

    

    变改间隔时光

    

    INTERVAL = 100

    

    ; 时可以应相使期周减小:

    

    

    转载请注明出处:  

    

文章结束给大家分享下程序员的一些笑话语录: 一位程序员去海边游泳,由于水性不佳,游不回岸了,于是他挥着手臂,大声求.救:“F1,F1!”

你可能感兴趣的文章
org.openqa.selenium.StaleElementReferenceException
查看>>
数论之 莫比乌斯函数
查看>>
linux下查找某个文件位置的方法
查看>>
python之MySQL学习——数据操作
查看>>
Harmonic Number (II)
查看>>
长连接、短连接、长轮询和WebSocket
查看>>
day30 模拟ssh远程执行命令
查看>>
做错的题目——给Array附加属性
查看>>
Url.Action取消字符转义
查看>>
JQuery选择器大全
查看>>
HBase 笔记3
查看>>
java中通过绝对路径将图片存入数据库
查看>>
ConcurrentHashMap(Java8)源码分析
查看>>
Python文件处理之文件指针(四)
查看>>
Numpy用法详解
查看>>
DataGridView在vb.net中的操作技巧
查看>>
PMP考试冲刺进行中。。。
查看>>
大换血的代价
查看>>
RunLoop--
查看>>
chrome 2行换行省略号 ... text-ellipse
查看>>