여기서는 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초 후 두 번째 결과