1

我想在 C++ 中创建一个计时器,当用户按下一个按钮时,程序会将按下的按钮的名称和按下的时间记录到一个数组中。

稍后,我希望能够“回放”用户所做的事情,例如。启动计时器,并在阵列中正确记录的时间模拟按钮按下。

最好的起点是哪里?C++中有定时器功能吗?

4

2 回答 2

1

你可以做这样的事情

struct ButtonEvent{
     EventInfo ei;
     std::chrono::milliseconds time_stamp;

};

struct Recorder{
    std::chrono::steady_clock::time_point start_time_;


    std::deque<ButtonEvent> events_;

void StartRecording(){
    start_time_ = std::chrono::steady_clock::now();
}

    void HandleEvent(EventInfo e){
        ButtonEvent be;
        be.time_stamp = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now() -  start_time_);
        be.ei = e;
        events_.push_back(be);
    }

    void Playback(){
        std::chrono::steady_clock::time_point 
        playback_time =std::chrono::steady_clock::now() ;
        while(events_.size()){
              std::chrono::milliseconds ts = 
                 std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now() - playback_time);
             if(events_.front().time_stamp <= ts){
             EventInfo e = events_.front().ei;
             // playback the event
             //...

             events_.pop_front();
        }

        // Some kind of sleep if you want

    }


}

};

其中 EventInfo 是具有回放事件所需信息的结构

于 2012-11-29T19:46:06.327 回答
0

请参阅如何在 C++ 中获取当前时间和日期的答案. C++ 中时间的标准库是来自 C 的 ctime。正如答案所述,如果您想要更现代的日期时间 API http://www.boost.org/doc/libs/1_52_0/doc/html/ ,请使用 boost date_time/date_time_io.html

于 2012-11-29T19:38:24.670 回答