Уведомление о событии использования ЦП в C / C ?

#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, ядро обрабатывает отслеживание событий, и оно не возвращается, пока не будет запущено событие. Мне нужно постоянно получать уведомления каждый раз, когда превышается пороговое значение.