C ++ 11 chrono库 - 如何在特定时间间隔后执行方法?

时间:2015-07-13 14:07:18

标签: c++11 chrono

我希望在几毫秒之后正确使用chrono库来配置我的类来调用方法。

#include <iostream>
#include <chrono>
#include <ctime>

Class House
{
private:
   //...
public:
   House() {};
   ~House() {};

   void method1() { std::cout << "method1 called" << std::endl; };
   void method2() { std::cout << "method2 called" << std::endl; };
   void method3() { std::cout << "method3 called" << std::endl; };
};

int main
{
   House h;

   //For the object 'h', I need to call method1() after 100ms
   // ???

   //For the object 'h', I need to call method2() after 200ms
   // ???

   //For the object 'h', I need to call method3() after 300ms
   // ???

   return 0;
}

任何想法如何做到这一点?

1 个答案:

答案 0 :(得分:2)

这是我阅读/学习的一本书的摘录,因为我刚刚进入C ++。 (我在3个月前开始,但在此之前我练习了Java和Python。)这解释了如何做你想做的事情以及展示的例子。我本可以用自己的话来解释它;但是我觉得好像这会撞到头上的钉子:

  

5.3.4.1等待活动

     

有时,线程需要等待某种外部事件,例如完成任务的另一个线程或已经过去的一定时间。最简单的“事件”就是时间流逝。考虑:

auto t0 = high_resolution_clock::now();
this_thread::sleep_for(milliseconds{20}); 
auto t1 = high_resolution_clock::now();
cout << duration_cast<nanoseconds>(t1 - t0).count() << " nanoseconds passed\n";
     

请注意,我甚至不必启动线程;默认情况下,this_thread引用唯一的线程(第42.2.6节)。我使用duration_cast将时钟的单位调整到我想要的纳秒。在尝试任何比这更复杂的事情之前,请参见§5.4.1和§35.2。时间设施位于<chrono>

     

- Bjarne Stroustrup的第4版C ++编程语言

我觉得使用这种方法有助于完成你想要做的事情:一个接一个地完成任务。查看<chrono>。我找到这个答案是因为我正在读一本书,这不是我的作品,而是来自一本书。如果您打算同时运行许多任务,则需要创建线程,如果它们碰巧共享资源,您可能需要锁定或只使用unique_lock / lock_guard。我更喜欢unique_lock