c++定時(shí)器如何實(shí)現(xiàn)

c++
小億
216
2023-11-09 16:32:59

在C++中,可以使用多種方法來實(shí)現(xiàn)定時(shí)器。

  1. 使用<chrono>庫(kù)和<thread>庫(kù)來實(shí)現(xiàn)定時(shí)器??梢允褂?code>std::this_thread::sleep_for()函數(shù)來讓線程休眠指定的時(shí)間,然后執(zhí)行定時(shí)任務(wù)。例如:
#include <iostream>
#include <chrono>
#include <thread>

void timerCallback()
{
    std::cout << "定時(shí)器回調(diào)函數(shù)" << std::endl;
}

int main()
{
    std::chrono::seconds interval(1); // 定時(shí)器間隔為1秒
    
    while (true) {
        timerCallback();
        std::this_thread::sleep_for(interval);
    }
    
    return 0;
}
  1. 使用系統(tǒng)提供的定時(shí)器函數(shù),如setitimer()timer_create()等。這些函數(shù)可以在一定時(shí)間間隔后觸發(fā)一個(gè)信號(hào)或執(zhí)行指定的回調(diào)函數(shù)。例如:
#include <iostream>
#include <csignal>
#include <unistd.h>

void timerCallback(int signum)
{
    std::cout << "定時(shí)器回調(diào)函數(shù)" << std::endl;
}

int main()
{
    signal(SIGALRM, timerCallback);
    
    struct itimerval timer;
    timer.it_value.tv_sec = 1; // 初始定時(shí)器間隔為1秒
    timer.it_value.tv_usec = 0;
    timer.it_interval.tv_sec = 1; // 定時(shí)器間隔為1秒
    timer.it_interval.tv_usec = 0;
    
    setitimer(ITIMER_REAL, &timer, nullptr);
    
    while (true) {
        pause();
    }
    
    return 0;
}

這些只是兩種簡(jiǎn)單的實(shí)現(xiàn)方式,具體選擇哪種方式還要根據(jù)實(shí)際需求和使用場(chǎng)景來決定。

0