C++ 實現定時器功能

2022/09/16 C++

前言

本篇文章將教各位如何透過 C++ 實現一個定時器。功能類似 JavaScript 的 setInterval()setTimeout()。首先建立一個 timercpp.h 實作定時器功能,完整程式碼可以參考。各位也可以參考文末的 Referenct 看原著作的版本。

  • setInterval() 是固定延遲了某段時間之後,執行對應的程式碼,並且不斷地重複定時被執行。
#include <iostream>
#include "timercpp.h"

using namespace std;

int main() {
    Timer t = Timer();
    int count = 1;
    // 固定延遲循環
    t.setInterval([&]() {
        cout << "Hey.. After each 1s... " << count++ << endl;
    }, 1000);
    while(true); // Keep main thread active  
}
  • setTimeout() 的功能是在延遲了某段時間 (單位為毫秒) 之後,才去執行一次。
#include <iostream>
#include "timercpp.h"

using namespace std;

int main() {
    Timer t = Timer();
    // 定時倒數
    t.setTimeout([&]() {
        cout << "Hey.. After 3s. But I will stop the timer!" << endl;
        t.stop();
    }, 3000);
    while(true); // Keep main thread active  
}

編譯時需要使用 -pthread flag。pthread 是 POSIX 下的執行緒標準,定義了創建和操縱執行緒的一套API。

g++ -o main ./main.cpp -pthread 

C/C++ sleep 用法 (標準庫)

Linux/Unix 平台 (秒)

Linux 使用 unistd.h 達到睡眠延遲效果。unistd.h 是C 和 C++ 程序設計語言中提供對 POSIX 作業系統 API。 在 Linux/Unix 平台的 sleep() 的時間單位是秒。若要達到微秒等級可以使用 usleep()

#include <stdio.h>
#include <unistd.h>

int main() {
    sleep(3);
    printf("print after 3 sec.\n");
}

Windows 平台(毫秒)

在 Windows 平台的 Sleep() 的時間單位是毫秒。

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

int main() {
    Sleep(3000);
    printf("print after 3 sec.\n");
}

Reference

鼓勵持續創作,支持化讚為賞!透過下方的 Like 拍手👏,讓創作者獲得額外收入~
版主10在2020年首次開設YouTube頻道,嘗試拍攝程式教學。想要了解更多的朋友歡迎關注我的頻道,您的訂閱就是最大的支持~如果想學其他什麼內容也歡迎許願XD
https://www.youtube.com/channel/UCSNPCGvMYEV-yIXAVt3FA5A

Search

    Table of Contents