我想在 C++ 中创建一个计时器,当用户按下一个按钮时,程序会将按下的按钮的名称和按下的时间记录到一个数组中。
稍后,我希望能够“回放”用户所做的事情,例如。启动计时器,并在阵列中正确记录的时间模拟按钮按下。
最好的起点是哪里?C++中有定时器功能吗?
我想在 C++ 中创建一个计时器,当用户按下一个按钮时,程序会将按下的按钮的名称和按下的时间记录到一个数组中。
稍后,我希望能够“回放”用户所做的事情,例如。启动计时器,并在阵列中正确记录的时间模拟按钮按下。
最好的起点是哪里?C++中有定时器功能吗?
你可以做这样的事情
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 是具有回放事件所需信息的结构
请参阅如何在 C++ 中获取当前时间和日期的答案?. C++ 中时间的标准库是来自 C 的 ctime。正如答案所述,如果您想要更现代的日期时间 API http://www.boost.org/doc/libs/1_52_0/doc/html/ ,请使用 boost date_time/date_time_io.html