Limitation du processeur en C

Je me demandais simplement s'il existait un moyen élégant de définir la charge maximale du processeur pour un thread particulier effectuant des calculs intensifs.

Pour l'instant, j'ai localisé la boucle la plus chronophage dans le thread (elle ne fait que de la compression) et j'utilise GetTickCount() et Sleep() avec des valeurs codées en dur. Il s'assure que la boucle continue pendant une certaine période de temps et qu'elle dort pendant une certaine durée minimale. Il fait plus ou moins le travail, c'est-à-dire garantit que le thread n'utilisera pas plus de 50% du CPU.
Cependant, le comportement dépend du nombre de cœurs de processeur (énorme inconvénient) et simplement laid (petit inconvénient :)).
Des idées ?

请先 登录 后评论

2 réponses

Mark Harrison

Sous Linux, vous pouvez modifier la priorité de planification d'un thread avec nice().

请先 登录 后评论
Douglas Leeder

Le problème est qu'il n'est pas normal de vouloir laisser le processeur inactif pendant que vous avez du travail à faire. Normalement, vous définissez une tâche d'arrière-plan sur la priorité IDLE et laissez le système d'exploitation gérer la planification de tout le temps CPU qui n'est pas utilisé par les tâches interactives.

Il me semble que le problème est le processus de surveillance.

Si votre tâche en arrière-plan est liée au processeur, vous souhaitez qu'elle prenne tout le temps processeur inutilisé pour sa tâche.

Peut-être devriez-vous envisager de corriger le programme de surveillance ?

请先 登录 后评论