2013年1月3日木曜日

std::chrono と boost::posix_time::ptime

 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 件のコメント: