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 は、イベントを再生するために必要な情報を持つ構造体です。
How to get current time and date in C++? への回答を参照してください。. C++ の時間の標準ライブラリは、C に由来する ctime です。その回答が言及しているように、より最新の日時 API が必要な場合は boost を使用してください http://www.boost.org/doc/libs/1_52_0/doc/html/ date_time/date_time_io.html