Используйте clock () для подсчета времени выполнения программы - PullRequest
6 голосов
/ 20 сентября 2011

Я использую что-то вроде этого, чтобы подсчитать, сколько времени занимает моя программа от начала до конца:

int main(){
    clock_t startClock = clock();
    .... // many codes
    clock_t endClock = clock();
    printf("%ld", (endClock - startClock) / CLOCKS_PER_SEC);
}

И мой вопрос, так как одновременно выполняется несколько процессов, скажемесли за x промежуток времени мой процесс находится в режиме ожидания , то время, в течение которого время будет тикать в моей программе?

Итак, в основном меня беспокоит, скажем, прохождение 1000 тактов, но мойпроцесс использует только 500 из них, получу ли я 500 или 1000 от (endClock - startClock)?

Спасибо.

Ответы [ 3 ]

11 голосов
/ 20 сентября 2011

Это зависит от ОС. В Windows clock() измеряет время ожидания. В Linux / Posix он измеряет суммарное процессорное время всех потоков.

Если вы хотите использовать настенное время в Linux, вы должны использовать gettimeofday().

Если вы хотите использовать процессорное время в Windows, вы должны использовать GetProcessTimes().

EDIT:

Итак, если вы работаете в Windows, clock() будет измерять время простоя.

В Linux clock() не будет измерять время простоя.

2 голосов
/ 20 сентября 2011

clock в POSIX измеряет время процессора, но обычно оно имеет крайне низкое разрешение. Вместо этого современные программы должны использовать clock_gettime с CLOCK_PROCESS_CPUTIME_ID clock-id. Это даст результаты с наносекундным разрешением, и обычно это действительно так хорошо.

1 голос
/ 20 сентября 2011

Согласно определению на странице руководства (в Linux),

Функция clock () возвращает приблизительное время процессора, используемое программой.

он будет пытаться быть максимально точным, но, как вы говорите, какое-то время (например, переключение процессов) трудно отразить в процессе, поэтому числа будут максимально точными, но не идеальными.

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