Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++11을 사용하여 타이머를 만드는 방법은 무엇입니까?

<시간/>

여기서는 C++를 사용하여 타이머를 만드는 방법을 살펴보겠습니다. 여기서 우리는 나중에 호출되는 하나의 클래스를 생성합니다. 이 클래스에는 다음과 같은 속성이 있습니다.

  • int(코드를 실행할 때까지 대기하는 밀리초)
  • bool(true이면 즉시 반환되고 지정된 시간 후에 다른 스레드에서 코드 실행)
  • 가변 인수(정확히 std::bind에 공급하려는)

정밀도를 변경하기 위해 chrono::milliseconds를 nanoseconds 또는 microseconds 등으로 변경할 수 있습니다.

예시 코드

#include <functional>
#include <chrono>
#include <future>
#include <cstdio>
class later {
   public:
      template <class callable, class... arguments>
      later(int after, bool async, callable&& f, arguments&&... args){
      std::function<typename std::result_of<callable(arguments...)>::type()> task(std::bind(std::forward<callable>(f), std::forward<arguments>(args)...));
      if (async) {
         std::thread([after, task]() {
            std::this_thread::sleep_for(std::chrono::milliseconds(after));
            task();
         }).detach();
      } else {
         std::this_thread::sleep_for(std::chrono::milliseconds(after));
         task();
      }
   }
};
void test1(void) {
   return;
}
void test2(int a) {
   printf("result of test 2: %d\n", a);
   return;
}
int main() {
   later later_test1(3000, false, &test1);
   later later_test2(1000, false, &test2, 75);
   later later_test3(3000, false, &test2, 101);
}

출력

$ g++ test.cpp -lpthread
$ ./a.out
result of test 2: 75
result of test 2: 101
$

4초 후 첫 번째 결과입니다. 첫 번째 결과에서 3초 후 두 번째 결과