if (reader.is_lazy()) goto tldr;
J'ai un fil d'arrière-plan qui fait un travail de type de fond I/O-intensive. Pour plaire aux autres threads et processus en cours d'exécution, je mets la priorité de fil en mode « fond » à l'aide SetThreadPriority
, comme ceci:Déterminer si le thread courant est faible priorité d'E/S
SetThreadPriority(GetCurrentThread(), THREAD_MODE_BACKGROUND_BEGIN);
Cependant, THREAD_MODE_BACKGROUND_BEGIN
est uniquement disponible dans Windows Server 2008 ou plus récent, ainsi que Windows Vista et plus récent, mais le programme doit également fonctionner sur Windows Server 2003 et XP. Ainsi, le code réel est plus comme ceci:
if (!SetThreadPriority(GetCurrentThread(), THREAD_MODE_BACKGROUND_BEGIN)) {
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_LOWEST);
}
Le problème est que sur Windows XP, il va perturber totalement le système en utilisant trop d'E/S. J'ai un plan pour une manière laide et honteuse d'atténuer ce problème, mais cela dépend de moi pouvoir déterminer si le thread actuel a une faible priorité d'E/S ou non.
Maintenant, je sais que je peux stocker la priorité de thread que j'ai fini par définir, mais le flux de contrôle dans le programme n'est pas vraiment bien adapté pour cela. Je préférerais pouvoir tester plus tard si le thread actuel a une faible priorité d'E/S - s'il est en "mode d'arrière-plan".
tldr:
GetThreadPriority
ne semble pas me donner cette information, il ne donne que la priorité du processeur.
Y at-il un moyen de déterminer si le thread actuel a une faible priorité d'E/S?
Comment GetThreadPriority fonctionne pas? – Goz
@Goz: Cela donne seulement la priorité à la CPU. J'ai mis à jour la question pour inclure ceci. –
Je vois ... intéressant. – Goz