Как я могу отслеживать использование процессора потоком в Delphi - PullRequest
1 голос
/ 14 января 2011

У меня есть программа с несколькими потоками, но некоторые потоки иногда перегружают процессор.поэтому мне нужно ограничить использование этих потоков процессором до% 50, возможно ли это в Delphi?

edit: извините, ребята, мой вопрос не был ясен.

Я действительно хочу знать, как я моготслеживать потоки (по крайней мере, составить список потоков с их идентификаторами потоков) и посмотреть, сколько ЦП использует каждый поток.Но я хочу сделать это, чтобы увидеть, какой поток отвечает за перегрузку процессора.

Снова прошу прощения за неудобства.

Ответы [ 3 ]

3 голосов
/ 14 января 2011

Я думаю, что ответ на ваш вопрос можно найти в следующем вопросе переполнения стека: Как получить использование процессора на поток в Windows (win32) .

Однако я бы посоветовал вам постараться понять, почему ваша программа ведет себя так, как она работает, и атаковать корень проблемы, а не уничтожать любые потоки, которые вам не нравятся. Конечно, если рассматриваемая программа предназначена исключительно для вашего личного использования, тогда ваш подход может быть совершенно целесообразным и прагматичным. Но если вы пишете профессиональное программное обеспечение, то я не вижу ситуации, когда уничтожение занятых потоков звучит как разумный подход.

2 голосов
/ 14 января 2011

Насколько я знаю, вы не можете "ограничивать использование ЦП", ни в Delphi, ни в самой Windows.

Вы, вероятно, хотите что-то еще: не мешать действиям пользователя или другим потокам.Но если ничего не происходит и пользователь ничего не делает, зачем бежать медленнее, чем вы могли бы?Просто используйте 100% ЦП, это никому не нужно!

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

Еще один прием, который дает больше шансов для запуска другим потокам, время от времени вызывайте Sleep (0) в теле вашего потока.Каждый раз, когда вы вызываете Sleep (), вы просите ОС переключиться на другой поток, просто говоря.

0 голосов
/ 15 января 2011

Я отслеживаю непрерывное использование ЦП на поток для каждого потока во всех моих приложениях, используя некоторый код в моей структуре (http://www.csinnovations.com/framework/framework.htm). Вывод журнала выглядит следующим образом:

15/01/2011 11: 17: 59.631, Миша, MISHA-DCDEL, Клиент Scores, V0.2.0.1, Основной поток, Проверка памяти, Подробный, Глобальные, «Системная выделенная память = 8282615808 байт (изменение с момента последней проверки = 4872478720 байт)»

15/ 01/2011 11: 17: 59.632, Миша, MISHA-DCDEL, Клиент Scores, V0.2.0.1, Основной поток, Проверка памяти, Подробный, Глобальный, "Процесс выделил память = 152580096 байт (изменение с момента последней проверки = -4579328bytes) "* ​​1006 *

15/01/2011 11: 17: 59.633, Миша, MISHA-DCDEL, Клиент Scores, V0.2.0.1, Основной поток, Проверка ЦП, Подробный, Глобальный," Использование ЦП системы =15,6% (в среднем за время жизни = 3,0%) "

15/01/2011 11: 17: 59.634, Миша, MISHA-DCDEL, Клиент баллов, V0.2.0.1, Основной поток, Проверка процессора, Подробный, Globals, «Загрузка ЦП процесса = 0,5% (среднее время жизни = 0,7%)» *

15/01/2011 11: 17: 59.634, Миша, MISHA-DCDEL, Клиент Scores, V0.2.0.1Main Threреклама, проверка ЦП, подробный, глобальные, «Загрузка ЦП потока = 0,0% (среднее время жизни = 0,0%)» *

15/01/2011 11: 17: 59.634, Миша, MISHA-DCDEL, Scores Client, V0.2.0.1, Основной поток, Проверка ЦП, Подробный, Глобальные, «Загрузка ЦП потока = 0,0% (среднее за время жизни = 0,0%)»

15/01/2011 11: 17: 59,634,Миша, MISHA-DCDEL, Scores Client, V0.2.0.1, Основной поток, Проверка ЦП, Подробный, Глобальные, «Загрузка ЦП потока = 0,0% (среднее за время жизни = 0,0%)»

15/01/ 2011 11: 17: 59.635, Миша, MISHA-DCDEL, Клиент Scores, V0.2.0.1, Основной поток, Проверка ЦП, Подробный, Глобальный, «Загрузка ЦП потока = 0,1% (среднее значение за время жизни = 0,1%)»

15/01/2011 11: 17: 59.635, Миша, MISHA-DCDEL, Клиент Scores, V0.2.0.1, Основной поток, Проверка ЦП, Подробный, Глобальный, «Загрузка ЦП потока = 0,0% (среднее значениесвыше срока службы = 0,0%) "

15/01/2011 11: 17: 59.635, Миша, MISHA-DCDEL, Клиент Scores, V0.2.0.1, Основной поток, Проверка процессора, Подробный, Глобальные,"Загрузка ЦП потока = 0,3% (среднее время жизни = 0,5%) "

15/01/2011 11: 17: 59.635, Миша,MISHA-DCDEL, Scores Client, V0.2.0.1, Основной поток, Проверка ЦП, Подробный, Глобальный, «Загрузка ЦП потока = 0,0% (среднее время жизни = 0,0%)»

15/01/201111: 17: 59.635, Миша, MISHA-DCDEL, Клиент Scores, V0.2.0.1, Основной поток, Проверка ЦП, Подробный, Глобальный, «Загрузка ЦП потока = 0,0% (среднее за время жизни = 0,0%)»

15/01/2011 11: 17: 59.636, Миша, MISHA-DCDEL, Клиент Scores, V0.2.0.1, Основной поток, Проверка ЦП, Подробный, Глобальный, «Загрузка ЦП потока = 0,0% (среднее за время жизни»)= 0.0%) "

15/01/2011 11: 17: 59.636, Миша, MISHA-DCDEL, Клиент баллов, V0.2.0.1, Основной поток, Проверка процессора, Подробный, Глобальные," Процессор потокаиспользование = 0,1% (среднее значение по времени жизни = 0,1%) "

Период времени настраивается, и я обычно использую 10 секунд, минуту или 10 минут.Загляните в файлы CsiSystemUnt.pas и AppGlobalsUnt.pas, чтобы узнать, как это делается.

Приветствия, Миша

PS Я также проверяю использование памяти.

...