博主有次在拆卸自己的笔记本电脑后,发现电脑如果静置时间长了有时会重启,但奇怪的是当我自己在电脑前工作的时候从来没有重启过。据此推测可能 CPU 完全空闲的时候风扇完全停转了,虽然 CPU 温度不高,但是其它芯片还是会发热,拆卸的时候导热硅胶垫没有装好,导致其它芯片过热引发系统重置。

解决的办法也很简单,就是模拟 CPU 工作的状态,人为添加少量负载即可。

目前市面上也有个比较流行的工具,叫 CPU Killer,可惜还要破解了才能用。一个这么简单的工具都要破解后才能无限制使用实在是不爽,所以博主准备自己开发一个。

代码实在很简单,应该没有什么讲解的必要了,这里直接贴出源码:

Killer.h

#ifndef KILLER_H
#define KILLER_H void Start(int cores, double load);
void Stop(); #endif

Killer.cpp

#include <windows.h>
#include <stdio.h>
#include "killer.h" // Private //////////////////////////////////////////////////////////////////// static volatile bool running = false; static void Tick(double usage) // One tick is 1000 ms
{
unsigned int busyTime = (int)(1000 * usage);
unsigned int idleTime = (int)(1000 * (1 - usage)); // Busy
DWORD t0 = GetTickCount();
while (GetTickCount() - t0 < busyTime)
; // Idle
Sleep(idleTime);
} struct ThreadContext
{
int index; // CPU Index (0, 1, 2, ...)
double load;
}; static DWORD WINAPI WorkerThread(LPVOID lpParam)
{
ThreadContext *context = (ThreadContext *)lpParam;
SetThreadAffinityMask(GetCurrentThread(), 1 << context->index); while (running)
{
Tick(context->load);
} return 0;
} // API //////////////////////////////////////////////////////////////////////// void Start(int cores, double load)
{
running = true; for (int i = 0; i < cores; i++)
{
ThreadContext *context = new ThreadContext();
context->index = i;
context->load = load; printf("Creating thread %d / %d ...\n", i + 1, cores); CreateThread(0, 0, WorkerThread, context, 0, 0);
} printf("Press q to exit\n");
} void Stop()
{
running = false;
Sleep(1100);
}

Main.cpp

#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include "killer.h" int GetNumberOfCores()
{
SYSTEM_INFO si;
GetSystemInfo(&si);
return (int)si.dwNumberOfProcessors;
} void PressAnyKeyToContinues()
{
printf("\n");
printf("Press any key to continue\n");
_getch();
exit(0);
} void main(int argc, char *argv[])
{
if (argc != 3)
{
printf("Command-line CPU Killer v0.1\n");
printf("---------------------------------------\n");
printf("Usage: CPU-Killer {Cores} {Target Load}\n");
printf("Example: CPU-Killer 1 50\n"); PressAnyKeyToContinues();
} int cores = 0;
int load = 0;
int totalCores = GetNumberOfCores(); sscanf_s(argv[1], "%d", &cores);
sscanf_s(argv[2], "%d", &load); if (cores <= 0 || cores > totalCores)
{
printf("Invalid number of cores!\n"); if (totalCores == 1)
printf("There should be exactly one core.\n");
else
printf("There should be %d to %d cores.\n", 1, totalCores); PressAnyKeyToContinues();
} if (load < 1 || load > 100)
{
printf("Invalid target load!\n");
printf("The target load should be between 1%% and 100%%.\n"); PressAnyKeyToContinues();
} printf("Number of CPU cores: %d\n", cores);
printf("Target load: %d%%\n", load); Start(cores, load / 100.0); while (true)
{
int ch = _getch();
if (ch == 'q')
break;
} printf("Exiting...\n");
Stop();
}

使用方法

鼠标右键拖放 CPU-Killer.exe 建立一个快捷方式,然后在后面加上参数即可。参数一共有两个:

  • Cores: 需要占用的 CPU 核数(一般取 1 - 4)
  • Target Load:目标负载(1 - 100)

比如 CPU-Killer.exe 1 50,就是占用一个核,该核的 CPU 占用率约为 50%。

注意:程序需要 Visual C++ 2008 运行库!

下载链接

百度网盘:http://pan.baidu.com/s/1o6FUvqy

或者可以试一下这个图片:

将图片保存到本地,然后把扩展名改为 .rar 再解压即可。

[小工具] Command-line CPU Killer(附源码及下载链接)的更多相关文章

  1. CentOS6.6系统源代码安装mysql5.5.28教程(附源码包下载地址)+sysbench的安装

    mysql从5.5版本开始,不再使用./configure编译,而是使用cmake编译器,具体的cmake编译参数可以参考mysql官网文档(※ 非常重要) http://dev.mysql.com/ ...

  2. wpf 模拟抖音很火的罗盘时钟,附源码,下载就能跑

    wpf 模拟抖音很火的罗盘时钟,附源码 前端时间突然发现,抖音火了个壁纸,就是黑底蕾丝~~~  错错错,黑底白字的罗盘时钟! 作为程序员的我,也觉得很新颖,所以想空了研究下,这不,空下来了就用wpf, ...

  3. JS小游戏:贪吃蛇(附源码)

    javascript小游戏:贪吃蛇 此小游戏采用的是面向对象的思想,将蛇,食物,和游戏引擎分为3个对象来写的. 为方便下载,我把js写在了html中, 源码中暂时没有注释,等有空我在添加点注释吧. 游 ...

  4. 一个web图片热点生成工具(winform开发) 附源码

    给图片加热点是web开发中经常用到的一个功能.这方面的工具也不少. 为了更好的满足自己的需求,写了一个winform程序. 可以方便的给图片加热点,更方便灵活! 源码下载 http://downloa ...

  5. Mybatis入门(附源码压缩包下载)

    首先,来个项目全景预览,文章尾部附上Demo下载链接 [1]pom.xml配置(加入jar包) <project xmlns="http://maven.apache.org/POM/ ...

  6. (附源码gitHub下载地址)spring boot -jta-atomikos分布式事务

    应用场景:双数据源,就是某些项目会涉及到两个数据源或者两个以上的数据源,这个多数据源的项目一般是数据同步,也就是把数据从另一个系统中,保存到另一个系统,两边的 数据库又不一样,比如一个Mysql.一个 ...

  7. 【转】.NET(C#):浅谈程序集清单资源和RESX资源 关于单元测试的思考--Asp.Net Core单元测试最佳实践 封装自己的dapper lambda扩展-设计篇 编写自己的dapper lambda扩展-使用篇 正确理解CAP定理 Quartz.NET的使用(附源码) 整理自己的.net工具库 GC的前世与今生 Visual Studio Package 插件开发之自动生

    [转].NET(C#):浅谈程序集清单资源和RESX资源   目录 程序集清单资源 RESX资源文件 使用ResourceReader和ResourceSet解析二进制资源文件 使用ResourceM ...

  8. MAC 命令行工具(Command Line Tools)安装

    不过升级后安装命令行工具(Command Line Tools)时发现官网没有clt的下载安装包了,原来改了,使用命令在线安装. 打开终端,输入命令:xcode-select --install 选择 ...

  9. 微信小程序之蓝牙开发(详细读数据、写数据、附源码)

    本文将详细介绍微信小程序的蓝牙开发流程(附源码)准备:微信只支持低功耗蓝牙也就是蓝牙4.0,普通的蓝牙模块是用不了的,一定要注意. 蓝牙可以连TTL接到电脑上,再用XCOM调试 一开始定义的变量 va ...

随机推荐

  1. MYSQL数据库命名与其设计规范

    你是否对获得MYSQL数据库命名与其设计规范 的实际操作感到十分头疼?如果是这样子的话,以下的文章将会给你相应的解决方案,以下的文章主要是介绍获得MYSQL数据库命名与其设计规范 的方案,以下就是相关 ...

  2. Linux ulimit 系统资源控制

    ulimit 的功能和用法 ulimit 功能简述 假设有这样一种情况,当一台 Linux 主机上同时登陆了 10 个人,在系统资源无限制的情况下,这 10 个用户同时打开了 500 个文档,而假设每 ...

  3. 使用UILocalNotification给App添加本地消息通知

    使用过的代码,直接贴上 UILocalNotification *notification = [[UILocalNotification alloc] init]; if (notification ...

  4. PHP 错误处理

    PHP 错误处理 在 PHP 中,默认的错误处理很简单.一条错误消息会被发送到浏览器,这条消息带有文件名.行号以及描述错误的消息. PHP 错误处理 在创建脚本和 Web 应用程序时,错误处理是一个重 ...

  5. SQL 无法打开物理文件 XXX.mdf",操作系统错误 5:"5(拒绝访问。)"

    用T-SQL命令附加数据库时,出现如下异常信息: 无法打开物理文件 XXX.mdf".操作系统错误 5:"5(拒绝访问.)". (Microsoft SQL Server ...

  6. QT5-控件-QLabel和QLCDNumber-标签显示图片或者视频,LCD用于上位机不错

    #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QLabel> #incl ...

  7. ASP.NET执行cmd命令

    批处理命令,是执行速度最快效益最高的命令.因为批处理命令,说白了,就是ms-dos环境下的命令,有很多的批处理命令,都是纯DOS下的命令. 然而,批处理命令尽管功能强大,却存在不足之处.批处理命令只能 ...

  8. PHPCMS V9二次开发便捷自定义后台入口文件夹

    phpcms v9二次开发便捷自定义后台入口文件夹 最新发布的phpcms v9由于采用了mvc的设计模式,所以它的后台访问地址是固定的,虽然可以通过修改路由配置文件来实现修改,但每次都修改路由配置文 ...

  9. centos 下mysql操作

    MySQL名字的来历MySQL是一个小型关系型数据库管理系统,MySQL被广泛地应用在Internet上的中小型网站中.由于其体积小.速度 快.总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为 ...

  10. Delphi窗体创建释放过程及单元文件小结(转)

    Delphi窗体创建释放过程及单元文件小结 Delphi中的窗体,有模式窗体与非模式窗体两种.两种窗体的调用方式不同,模式窗体使用ShowModal显示,非模式窗体使用Show显示.当显示模式窗体的时 ...