• 实现Linux版本的 cpu 正弦曲线


    #include <iostream>
    #include
    <time.h>
    #include
    <math.h>
    using namespace std;

    typedef
    long long int int64;

    int64 GetTickCount()
    {
    timespec now;
    clock_gettime(CLOCK_MONOTONIC,
    &now);
    int64 sec
    = now.tv_sec;
    int64 nsec
    = now.tv_nsec;
    return sec*1000 + nsec/1000000;
    }

    void cpu_sin()
    {
    const int SAMPLE_COUNT = 100;
    const int SAMPLE_TIME = 100;
    const double PI = 3.1415926;
    const double DELTA = 2*PI/SAMPLE_COUNT;
    int sample_value[SAMPLE_COUNT];
    for(int i = 0; i<SAMPLE_COUNT; ++i)
    {
    sample_value[i]
    = SAMPLE_TIME/2 * (sin(DELTA * double(i)) + 1) + 1;
    }
    int j = 0;
    while(true)
    {
    int64 start
    = GetTickCount();
    while(GetTickCount() - start < sample_value[j])
    ;
    usleep((SAMPLE_TIME
    - sample_value[j])*1000);
    j
    = (++j)%SAMPLE_COUNT;
    }
    }

    int main() {
    cpu_sin();
    return 0;
    }

    实现到方法和windows版本类似。都是采样,在一个非常小到时间间隔里控制cpu到使用时间,让cpu忙碌到时间成正弦曲线。

    这里需要用到linux版本到获取时间到方法。在windwos版本中,GetTickCount()函数非常好用,能获得毫秒时间。而且本问题正需要毫秒级别的控制。

    因此打算在Linux中山寨一个毫秒级别的GetTickCount。由于Second * 1000 很有可能超出 long int 的范围,因此定义了long long int,它是64位的

    注意各种单位:

    timespce 中的nsec是纳秒级别的,sec是秒级别到

    sleep()中到参数是秒,不同与windows的ms,usleep的参数是微妙级别

  • 相关阅读:
    左旋一个字符串和手摇反转法
    LCS
    游戏服务器学习_1
    面试题_带答案_2
    面试题_带答案
    安卓_13
    安卓_12activity
    安卓_12
    多盟_1
    安卓没删干净导致报错
  • 原文地址:https://www.cnblogs.com/lovelyxia/p/1994385.html
Copyright © 2020-2023  润新知