Чтобы спать в C, я должен использовать время с часами или системный вызов? - PullRequest
2 голосов
/ 28 января 2012

Я проверял clock () на cplusplus.com . Их пример заключается в том, чтобы заставить процесс подождать секунду, а затем вывести строку в цикле до истечения 10 секунд. Мне нужно сделать нечто подобное в домашнем задании, над которым я работаю. Мне было интересно вот что: если я просто отправлю свою программу в цикл, разве это не использует системные ресурсы, чтобы просто раскрутить меня? В этом случае системный вызов не будет лучше?

Спасибо за вашу помощь!

Ответы [ 5 ]

6 голосов
/ 28 января 2012

Да, лучше использовать системный вызов или библиотечную функцию, например sleep(). Этот пример clock() предназначен только для того, чтобы показать, как правильно вызывать функцию и интерпретировать ее возвращаемое значение, а не для того, чтобы показать лучший способ заставить программу ждать.

4 голосов
/ 28 января 2012

Это странный пример. Я знаю, что это просто пример, но ...

Чтобы спать, звоните sleep(unsigned int).

Существуют другие вызовы (nanosleep на Unix-Y машинах) для сна менее секунды. И вы всегда можете использовать select(), если вы старая школа.

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

2 голосов
/ 28 января 2012

Просто чтобы прояснить, вы НЕ должны делать что-то подобное примеру. Если вы это сделаете, ваша программа будет потреблять 100% ЦП на одном из ядер, пока она ожидает. Гораздо лучше использовать что-то вроде sleep или select.

2 голосов
/ 28 января 2012

Я должен добавить к вышесказанному, что sleep() переводит в спящий режим только текущий поток, а не всю программу, если она многопоточная.

0 голосов
/ 30 января 2012

Если ваша программа многопоточная, то лучше использовать sleep(). Причина в том, что clock() потребуется дополнительное кодирование для этого, в то время как с помощью sleep() вы можете выполнять свою задачу с меньшим объемом памяти и меньшим временем ... clock() будет задействовать много процессора ...

...