程序占用cpu时间计算

程序占用cpu时间计算

源码

CMakeLists.txt

cmake_minimum_required(VERSION 3.5)

project(RunTimeCnt LANGUAGES CXX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Os -std=c++11 -O3 -lpthread")
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_executable(RunTimeCnt main.cpp)
target_link_libraries(RunTimeCnt -lpthread)

main.cpp

#include <iostream>
#include <pthread.h>
#include <thread>
#include <chrono>
#include <sys/time.h>
#include <unistd.h>
#include <time.h>

using std::cout;
using std::endl;
using std::thread;
using std::this_thread::sleep_for;
using std::chrono::milliseconds;

// std::this_thread::sleep_for (std::chrono::milliseconds(1000));

class StopWatch{
    
    
private:
    struct timespec start_times;
    bool is_started;

public:
    void start() noexcept{
    
    
        clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &this->start_times);
        this->is_started = true;
    }
    unsigned long long int get_ns() noexcept{
    
    
        struct timespec end_times;
        //CLOCK_REALTIME:系统实时时间,随系统实时时间改变而改变,即从UTC1970-1-1 0:0:0开始计时,中间时刻如果系统时间被用户改成其他,则对应的时间相应改变。
        //CLOCK_MONOTONIC:从系统启动这一刻起开始计时,不受系统时间被用户改变的影响。
        //CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间。
        //CLOCK_THREAD_CPUTIME_ID:本线程到当前代码系统CPU花费的时间。
        clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end_times); //

        unsigned long long int s = end_times.tv_sec - start_times.tv_sec;
        unsigned long long int ns = s * 1000000000UL + end_times.tv_nsec - start_times.tv_nsec;

        return ns;
    }

    double get_us() noexcept{
    
    
        return get_ns() / 1000.0;
    }

    double get_ms() noexcept{
    
    
        return get_ns() / 1000000.0;
    }
};

void Thread(){
    
    
    sleep_for(milliseconds(6000));

    cout << "thread exit!" << endl;
}

int main()
{
    
    
    StopWatch stop_watch;
    stop_watch.start();
    cout << "thread start!" << endl;
    thread t1{
    
    Thread};
    t1.join();
    cout << "ms: " << stop_watch.get_ms() << endl;
    cout << "us: " << stop_watch.get_us() << endl;
    cout << "ns: " << stop_watch.get_ns() << endl;
    return 0;
}

运行结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/wct3344142/article/details/115393971