boost::asio::io_service のキャンセル処理を考えていて、キャンセル・フラグでキャンセルしようと思っていたんですが、考えてみたらキャンセル・フラグを戻すタイミングも難しいよなーと気がつきました。
std::chrono ちょっと斜に構えた感じもするので、まずは boost::posix_time::ptime でキャンセル時刻を記録しておき、io_service::post した時刻と比較して、キャンセル時刻が新しければ、キャンセル処理を行うという風にしようと…。ところが ptime 秒単位なんで、処理が立て込んでいると、いつのキャンセルなんだか全くわからないという事態に…。
以下のコードの出力結果は、完全に環境依存なんでしょうけど、立て込んでいる状況(1秒間にキャンセルが2回以上ある状況)でキャンセル時刻で判断しようと思ったら、やっぱ chrono で処理するのが妥当なのかなぁと…。
#include <iostream>
#include <chrono>
#include <boost/date_time/posix_time/posix_time.hpp>
int main() {
boost::posix_time::ptime pt = boost::posix_time::second_clock::local_time();
std::cout << "hoge" << std::endl;
boost::posix_time::ptime pt2 = boost::posix_time::second_clock::local_time();
std::cout << pt << std::endl;
std::cout << (pt2 - pt).total_milliseconds() << std::endl;
auto tp = std::chrono::system_clock::now() ;
std::cout << "hoge" << std::endl;
auto tp2 = std::chrono::system_clock::now();
std::cout << (tp2-tp).count() << std::endl;
return 0;
}
mac 環境 gcc4.7 での実行結果
hoge
2013-Jan-03 16:17:06
0
hoge
2
0 件のコメント:
コメントを投稿