boost::xtime

う〜ん。昨日のCPU100%対策は不完全でした。
boost::sleep()の引数、boost::xtimeは次のような構造体です。

struct xtime
{
    xtime_sec_t sec;
    xtime_nsec_t nsec;
};

使用する場合は、まずboost::xtime_get()で現在時刻を取得し、secとnsecを弄るわけですが、

boost::xtime xt;
boost::xtime_get(xt, boost::TIME_UTC);
xt.nsec += 100*1000*1000; // 100ミリ秒足したつもり

nsecが1秒を超えたら、secに繰り上げないとダメです。似たような構造体はたくさんあるんですが、使うたびに間違えてる気がする。
間違えないようにライブラリ化してみました。

#include <hamigaki/thread/utc_time.hpp>
hamigaki::thread::utc_time t; // 現在時刻で初期化される
t += hamigaki::thread::milliseconds(100); // 繰り上がりもOK

修正版