Я думаю, что, вероятно, где-то ошибка в вашем составе sec и usec. Я не могу точно сказать, что именно, не зная, какие ошибки вы видите. Грубое предположение состоит в том, что usec никогда не может быть> 999999, поэтому вы полагаетесь на переполнение, чтобы знать, когда настраивать sec. Также может быть проблема с форматом вывода продолжительности.
В любом случае. Почему бы не хранить компоненты utime и stime в виде секунд с плавающей точкой, вместо того, чтобы пытаться создать свой собственный вывод на выходе? Я уверен, что следующее даст вам подходящие секунды.
static int timeval_diff_ms(timeval const& end, timeval const& start) {
int micro_seconds = (end.tv_sec - start.tv_sec) * 1000000
+ end.tv_usec - start.tv_usec;
return micro_seconds;
}
static float timeval_diff(timeval const& end, timeval const& start) {
return (timeval_diff_ms(end, start)/1000000.0f);
}
Если вы хотите разложить это обратно на rusage, вы всегда можете использовать int-div и modulo.