首页 > 其他分享 >控制CPU占用率

控制CPU占用率

时间:2023-09-01 22:57:55浏览次数:38  
标签:控制 const int tv startTime include 占用率 CPU

控制CPU占用率

大概原理就是一段时间计算另一段时间休眠,占比宏观上就可以体现成CPU占用率,由于机器上还有其它程序运行,所以不会很精确。

代码

Windows版本

#include <stdio.h>
#include <windows.h>

DWORD WINAPI ThreadFunc(void* data) {
    const int interval = 100; // 总时间间隔(毫秒)
    const int workTime = 30;  // 工作时间(毫秒)
    const int sleepTime = interval - workTime; // 休眠时间(毫秒)

    while (1) {
        DWORD startTime = GetTickCount();
        while ((GetTickCount() - startTime) <= workTime) {
        }
        Sleep(sleepTime);
    }

    return 0;
}

int main() {
    SYSTEM_INFO sysinfo;
    GetSystemInfo(&sysinfo);
    int numCPU = sysinfo.dwNumberOfProcessors;

    printf("Number of CPU cores: %d\n", numCPU);

    HANDLE* threads = (HANDLE*)malloc(numCPU * sizeof(HANDLE));
    if (threads == NULL) {
        fprintf(stderr, "Memory allocation failed.\n");
        return 1;
    }

    for (int i = 0; i < numCPU; ++i) {
        threads[i] = CreateThread(NULL, 0, ThreadFunc, NULL, 0, NULL);
        if (threads[i] == NULL) {
            fprintf(stderr, "Error creating thread %d\n", i);
            return 1;
        }
    }

    WaitForMultipleObjects(numCPU, threads, TRUE, INFINITE);

    free(threads);

    return 0;
}

Linux版本

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <sys/sysinfo.h>
#include <time.h>

void *ThreadFunc(void *data) {
    const int interval = 100000000; // 总时间间隔(纳秒)
    const int workTime = 30000000;  // 工作时间(纳秒)
    const int sleepTime = interval - workTime; // 休眠时间(纳秒)

    struct timespec ts;
    ts.tv_sec = sleepTime / 1000000000;
    ts.tv_nsec = sleepTime % 1000000000;

    while (1) {
        struct timespec startTime, currentTime;
        clock_gettime(CLOCK_REALTIME, &startTime);
        do {
            clock_gettime(CLOCK_REALTIME, &currentTime);
        } while ((currentTime.tv_sec - startTime.tv_sec) * 1000000000 + (currentTime.tv_nsec - startTime.tv_nsec) <= workTime);
        nanosleep(&ts, NULL);
    }

    return NULL;
}

int main() {
    int numCPU = get_nprocs();
    printf("Number of CPU cores: %d\n", numCPU);

    pthread_t *threads = (pthread_t *)malloc(numCPU * sizeof(pthread_t));
    if (threads == NULL) {
        fprintf(stderr, "Memory allocation failed.\n");
        return 1;
    }

    for (int i = 0; i < numCPU; ++i) {
        if (pthread_create(&threads[i], NULL, ThreadFunc, NULL)) {
            fprintf(stderr, "Error creating thread %d\n", i);
            return 1;
        }
    }

    for (int i = 0; i < numCPU; ++i) {
        pthread_join(threads[i], NULL);
    }

    free(threads);

    return 0;
}

编译:

gcc cpu_control.c -o cpu_control -lpthread

来源

chatgpt


2023/8/27

标签:控制,const,int,tv,startTime,include,占用率,CPU
From: https://www.cnblogs.com/-rvy-/p/17672993.html

相关文章

  • 数据手套控制无人机遇到的问题
    ......
  • java基础-流程控制-day04
    目录1.if单分支2.ifelse多分支3.ifelse双分支4.随机生成一定区间的整数5switch1.if单分支publicclassTestIf01{ publicstaticvoidmain(String[]args){ //对三个数(1-6)求和 intnum1=6; intnum2=6; intnum3=5; intsum=0; sum+=nu......
  • MVCC多版本并发控制
    MVCC定义1、MVCC简介MVCC,全称Multi-VersionConcurrencyControl,即多版本井发控制,MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。MVCC在MysQLInnoDB中的实现主要是为了提高数据库并发性能,用更好的方式去处理读写冲突。做......
  • 数字化工厂的核心设备ARM控制器BL304
    嵌入式ARM控制器BL304系列是一款专为工业控制领域设计的坚固型工控设备。它采用NXP公司的处理器I.MX8MMini四核64位处理器,搭配四核Cortex-A53+单核Cortex-M4构架,运行速度高达1.8GHz,具有高度的稳定性和可靠性。处理器是嵌入式控制器的核心部件,NXP的I.MX8MMini处理器是一款强大的......
  • svnWebUI svn服务端web 开源代码版本控制系统 图形化管理系统
    svn是Subversion的简称,是一个开源的代码版本控制系统,svn就是用于多人共同开发同一个项目,达到资源共用目的工具。版本控制是什么?版本控制(Revisioncontrol)是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理。可记录每个版本的信息,方便问题追踪。同时版本控制......
  • 简易客户管理系统(控制台版)
    目标熟悉面向对象编程涉及的知识:类结构的使用:属性、方法和构造器对象的创建与使用类的封装性声明和使用数组数组的插入、删除、替换、增加关键字使用:this   工具类Utility的定义将不同的功能封装为方法,就是可以直接通过调用方法使用它的功能,而无需考虑具体的功能......
  • ARM和X86、X86和X64、Intel和AMD、CPU和GPU介绍
    一、ARM和X86X86和ARM都是CPU设计的一个架构。X86用的是复杂指令集。ARM用的是精简指令集。指令集其实就是机器码,机器码上是汇编,汇编之上是程序语言例如java、c、c#。复杂指令集是在硬件层面上设计了很多指令,所以编程会简单些。精简指令集是在硬件层面上设计的指令比较少,所......
  • ARM控制器工业物联网等领域展现卓越实力
    在智慧医疗领域,BL304可以用于实现医疗设备的智能化、远程监控和数据交换。在智慧电力领域,BL304可以帮助实现电网的智能化管理,提升电力供应的效率。在智慧安防领域,BL304可以实现智能监控、智能门锁等应用,保障安全。搭配四核Cortex-A53+单核Cortex-M4构架,运行速度高达1.8GHz,具有高度......
  • 新品!芯驰D9-Pro六核国产CPU,自主可控、安全可信的高性能显控方案
    前段时间,米尔上市了芯驰D9系列的国产核心板和开发板。这款核心板既能跑安卓、Linux、RTOS系统,还有单核、双核、5核、6核可选,吸引了很多客户来咨询。这次米尔上市了这款基于芯驰D9-Pro的MYC-YD9360核心板及开发板,采用邮票孔连接方式,专为高端显控一体机的应用设计。 D9-Pro的特......
  • Rust--流程控制
    循环/判断ref:流程控制-Rust语言圣经(RustCourse)判断ifcondition==true{//A...}else{//B...}if语句块是表达式,所以可以为变量赋值,当然要注意的是保证返回的类型相同:fnmain(){letcondition=true;letnumber=ifcondition{......