получение микросекунд от boost :: time_duration - PullRequest
0 голосов
/ 09 ноября 2018

Я использую boost::posix_time для реализации часов.

date d(2000,Jan,20);
ptime start(d);
time_iterator titr(start,microseconds(15)); //increment by 15 microseconds

Теперь, когда я хочу получить микросекунды, я делаю ++time_iterator, поэтому он будет увеличивать такт на эту длительность. После этого приращения я хочу получить микросекунды с прошедшего часа, а не общие микросекунды. Один из способов - преобразовать его в строку, извлечь данные из строки. Но есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 11 ноября 2018

Вы можете построить время суток, чтобы отметить начало часа (soh) и рассчитать разницу оттуда:

for (time_iterator titr(start, /*micro*/seconds(15)); *titr < end; ++titr) {
    ptime soh(titr->date(), time_duration(titr->time_of_day().hours(), 0, 0));

    std::cout << *titr << "\t" << soh << " elapsed: " << (*titr-soh).total_microseconds() <<  "\n";
}

Это может быть более эффективным, понимание даты не имеет значения (часы совпадают с датами):

for (time_iterator titr(start, /*micro*/seconds(15)); *titr < end; ++titr) {
    std::cout << *titr << "\t elapsed: " << (titr->time_of_day()-hours(titr->time_of_day().hours())).total_microseconds() <<  "\n";
}

Может быть, даже эффективнее взять общие микросекунды и выполнить трюк по модулю:

std::cout << *titr << "\t elapsed: " << (titr->time_of_day().total_microseconds() % hours(1).total_microseconds()) << "\n";

Всегда профилируйте свой код, если это важно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...