Хорошо, обнаружена ошибка новичка, во время CompleteProcessing () мне нужно вернуть мой ActionBlock вместо моего TransformBlock, так как ActionBlock - последний блок.
#include <ctime>
#include <functional>
using namespace std;
void f() {
clock_t begin = clock();
// ...code to measure time...
clock_t end = clock();
function<double(double, double)> convtime = [](clock_t begin, clock_t end)
{
return double(end - begin) / CLOCKS_PER_SEC;
};
printf("Elapsed time: %.2g sec\n", convtime(begin, end));
}
Подобный пример к одному доступному здесь, только с дополнительной функцией преобразования + распечатывают.
Они одинаковы, потому что ваша функция doSomething выполняется быстрее, чем гранулярность таймера. Попробуйте:
printf ("**MyProgram::before time= %ld\n", time(NULL));
for(i = 0; i < 1000; ++i) {
doSomthing();
doSomthingLong();
}
printf ("**MyProgram::after time= %ld\n", time(NULL));
функция time(NULL) вернет количество секунд, прошедших с 01/01/1970 в 00:00. И поскольку эта функция вызывается в разное время в вашей программе, она всегда будет разной Time in C++
Значения, выводимые вашей второй программой - это секунды и микросекунды.
0 26339 = 0.026'339 s = 26339 µs
4 45025 = 4.045'025 s = 4045025 µs
Вызов функции time (NULL)
вернет количество секунд, прошедших с момента epoc: 1 января 1970 года. Возможно, вы имеете в виду разницу между двумя отметками времени:
size_t start = time(NULL);
doSomthing();
doSomthingLong();
printf ("**MyProgram::time elapsed= %lds\n", time(NULL) - start);
Только для Windows: (Тег Linux был добавлен после того, как я опубликовал этот ответ )
Вы можете использовать GetTickCount () , чтобы получить количество миллисекунд, прошедших с момента запуска системы.
long int before = GetTickCount();
// Perform time-consuming operation
long int after = GetTickCount();
Как я вижу из вашего вопроса, похоже, вы хотите узнать время, прошедшее после выполнения некоторого фрагмента кода. Думаю, вам будет удобно увидеть результаты за секунды. В таком случае попробуйте использовать функцию difftime ()
, как показано ниже. Надеюсь, это решит вашу проблему.
#include <time.h>
#include <stdio.h>
time_t start,end;
time (&start);
.
.
.
<your code>
.
.
.
time (&end);
double dif = difftime (end,start);
printf ("Elasped time is %.2lf seconds.", dif );
Причина, по которой оба значения одинаковы, заключается в том, что ваша длинная процедура не занимает так много времени - менее одной секунды. Вы можете попробовать просто добавить длинный цикл (for (int i = 0; i < 100000000; i++) ; ) в конце функции, чтобы убедиться, что проблема именно в этом, а затем мы сможем продолжить...
В случае, если все вышесказанное окажется правдой, вам нужно будет найти другую системную функцию (я понимаю, что вы работаете на linux, поэтому не могу помочь вам с названием функции) для более точного измерения времени. Я уверен, что в linux есть функция, похожая на GetTickCount(), вам просто нужно найти ее.
#include <ctime>
void f() {
using namespace std;
clock_t begin = clock();
code_to_time();
clock_t end = clock();
double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC;
}
Функция time()
точна только до секунды, но есть CLOCKS_PER_SEC
"часы" в пределах секунды. Это простое, портативное измерение, хотя и слишком упрощенное.
Внутри функция будет обращаться к системным часам, поэтому она возвращает разные значения каждый раз, когда вы ее вызываете. В целом, в нефункциональных языках может быть много побочных эффектов и скрытых состояний в функциях, которые нельзя увидеть, просто посмотрев на имя функции и ее аргументы.
time(NULL)
возвращает количество секунд, прошедших с 01/01/1970 в 00:00 (эпоха). Таким образом, разница между этими двумя значениями - это количество секунд, которое заняла ваша обработка.
int t0 = time(NULL);
doSomthing();
doSomthingLong();
int t1 = time(NULL);
printf ("time = %d secs\n", t1 - t0);
Вы можете получить более тонкие результаты с помощью getttimeofday()
, который возвращает текущее время в секундах, как это делает time()
, а также в микросекундах.