#c #c #cpu #cpu-usage #system-calls
#c #c #процессор #загрузка процессора #системные вызовы
Вопрос:
Трудно определить, есть ли системный вызов для получения уведомления, когда загрузка процессора достигает определенной точки? Я специально ищу вызов для вариантов Linux / BSD, но если вы знаете версию Windows, также подключитесь, чтобы я знал для дальнейшего использования.
Что-то похожее на kqueue.
Очевидно, я мог бы просто периодически проверять /proc / cpuinfo или отдельные utimes, но я надеялся, что существует системный вызов, который сделает это за меня более эффективным способом.
например, «Дайте мне знать, когда среднее общее использование процессора за последнюю минуту превысит 50%»
Ответ №1:
Вы можете получить информацию об использовании ЦП из getrusage()
и вы можете использовать мягкие ограничения с setrlimit()
, чтобы получать SIGXCPU
информацию при превышении заданного порога (который затем можно увеличить в обработчике сигналов).
Дополнительная информация: http://linux.about.com/library/cmd/blcmdl2_getrusage.htm
Комментарии:
1. Я использовал это раньше, но тогда мне пришлось бы постоянно опрашивать это в цикле, пока (или если) использование не превысит пороговое значение, где, как и в случае с kqueue, ядро обрабатывает отслеживание событий, и оно не возвращается, пока не будет запущено событие. Мне нужно постоянно получать уведомления каждый раз, когда превышается пороговое значение.
Ответ №2:
API, которые вы ищете, — это GetProcessTimes и GetSystemTimes. По этой ссылке приведены два очень хороших примера их использования. Если у вас есть какие-либо дополнительные вопросы, поскольку я сам использовал их для определения загрузки процессора, не стесняйтесь задавать.
Комментарии:
1. Я использовал это раньше, но тогда мне пришлось бы постоянно опрашивать это в цикле, пока (или если) использование не превысит пороговое значение, где, как и в случае с kqueue, ядро обрабатывает отслеживание событий, и оно не возвращается, пока не будет запущено событие. Мне нужно постоянно получать уведомления каждый раз, когда превышается пороговое значение.