Последние три дня я потратил, пытаясь найти решение следующей проблемы: у меня есть фрагмент кода, написанный на 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 изучил его и даже попробовал, но не заставил работать, так что если это единственный способ, мне определенно нужен тщательный объяснение того, как на самом деле это сделать.
Заранее спасибо за вашу помощь!
С наилучшими пожеланиями,
Микаэл
Задача ещё не решена.