Использование таймера Boost (или любого другого таймера) в Windows на C ++ для измерения времени ЦП внешнего вызова системы

Последние три дня я потратил, пытаясь найти решение следующей проблемы: у меня есть фрагмент кода, написанный на c ++ в Microsoft Visual Studio 2010, из которого я называю некоторые внешние исполняемые файлы, которые мне в черный ящик, так что я могу ‘ изменить их код вообще. Я хотел бы знать Процессор времени(в отличие от истекшего времени / времени настенных часов) этих внешних программ. В Linux это можно решить просто с помощью time команда, а затем вызов исполняемого файла, но в Windows 2007 я не могу найти ни одного решения.

Я думал, что класс таймера boost решит мою проблему, но, как оказалось, он не может измерить время CPU внешней программы, только программы, в которой он фактически реализован. По крайней мере, я так думаю. Это соответствующая часть моего кода.

    using boost::timer::cpu_timer;
using boost::timer::cpu_times;
using boost::timer::nanosecond_type;

cpu_timer timer;
system( Execute_some_external_program.c_str() );
cpu_times elapsed_times = timer.elapsed();

std::cout << "Wall: " << elapsed_times.wall/1.0e9 << "\tCPU: " << \
(elapsed_times.user + elapsed_times.system)/1.0e9 << std::endl;

(Деление на 1e9 происходит, так как времена даны в наносекундах).
Я получаю вывод:

Стена: 120.101 ЦП: 0.0156001

Таким образом, время ЦП не измерялось в течение всего времени выполнения внешней программы, только время настенных часов.

Итак, как я могу измерить процессорное время внешних программ в такой структуре? Мне действительно нужны времена CPU, так как некоторые внешние компоненты в их текущей реализации используют многопоточность, а некоторые нет, и я хочу иметь возможность сравнивать время вычислений, как если бы все использовали однопоточность (я могу не заставляйте программы использовать однопоточность в данный момент).

РЕДАКТИРОВАТЬ:
Эта ссылка содержит некоторую полезную информацию об этой проблеме. Как я могу измерить процессорное время в C ++ на окнах и включить вызовы system ()? тем не менее, я не программист, поэтому использование ручек и прочего пугает меня немного: PI изучил его и даже попробовал, но не заставил работать, так что если это единственный способ, мне определенно нужен тщательный объяснение того, как на самом деле это сделать.

Заранее спасибо за вашу помощь!

С наилучшими пожеланиями,
Микаэл

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]