Advertisement
Guest User

Untitled

a guest
Apr 17th, 2014
37
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.20 KB | None | 0 0
  1. #include <iostream>
  2. #include <thread>
  3. #include <chrono>
  4.  
  5. // 定時器
  6. // ms : Callbake時間
  7. // callback : Signature bool(long long)
  8. // 當callback return true時,timer便會停止
  9. void timer(long long ms,std::function<bool(long long ms)> callback)
  10. {
  11.     using namespace std::chrono;
  12.     auto p = system_clock::now();   // 記録現在時間
  13.     auto next = ms;                 // 下一次callback時間
  14.     // busy loop
  15.     while (true) {
  16.         // 使用yield()以避免CPU資源佔用
  17.         std::this_thread::yield();
  18.         auto duration = system_clock::now() - p;    // 持續時間
  19.         auto millis = duration_cast<milliseconds>(duration).count(); // 轉致ms
  20.         // 當持續時間 > 下一次callback時間
  21.         if (millis >= next) {
  22.             // post callback & if return true exit this times
  23.             if (callback(millis)) break;
  24.             next += ms; // 下一次callback時間
  25.         }
  26.     }
  27. }
  28.  
  29. int main()
  30. {
  31.     // 定時器:毎10ms回呼(Callback)一次
  32.     timer(10, [](long long ms){
  33.         std::cout << "time stamp: " << ms << " ms" << std::endl;
  34.         return (ms >= 1000);    // 如果比1000ms大的話,timer停止
  35.     });
  36.     system("pause");
  37. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement