首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ 實現定時返回不同值:基於時間戳的分段函數

     編輯:程式設計疑難解答

需求

設計函數:(0,500ms) 返回 0,(500,1000ms) 返回 1,以此類推。

方案一:靜態局部變量記錄上次時間 (單線程)


int getValue() {
    static auto start = chrono::steady_clock::now();
    auto now = chrono::steady_clock::now();
    auto ms = chrono::duration_cast(now - start).count();
    return static_cast(ms / 500) % 2; // 0,1,0,1... 或擴展更多值
}

方案二:傳入時間點 (可測試、線程安全)


int getValueAt(chrono::steady_clock::time_point tp, chrono::steady_clock::time_point base) {
    auto ms = chrono::duration_cast(tp - base).count();
    if (ms < 0) return -1;
    return static_cast(ms / 500); // 0,1,2,3...
}

方案三:定時器驅動 (GUI/事件循環)


// Qt 示例
QTimer *timer = new QTimer(this);
int state = 0;
connect(timer, &QTimer::timeout, [&]{
    state = (state + 1) % 2; // 或更複雜邏輯
    emit valueChanged(state);
});
timer->start(500);

參考資源

C++ 定時器實現定時返回不同值

選擇建議

  • 簡單邏輯、單線程 → 方案一最簡潔。
  • 需單元測試、多線程、確定性 → 方案二 (純函數)。
  • GUI/事件驅動架構 → 方案三 (框架定時器)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved