2008-11-13 5 views
1

J'ai deux appels système GetSystemTime() et GetThreadTimes() dont j'ai besoin pour calculer l'utilisation du processeur par un thread Win32 donné. Par souci de précision, j'ai besoin de m'assurer que GetSystemTime() et GetThreadTimes() sont exécutés atomiquement; c'est-à-dire qu'il ne devrait pas y avoir de changement de contexte entre un appel à GetSystemTime() & GetThreadTimes().Win32: Exécution atomique du bloc de code

La raison en est que parfois je me retrouve avec un pourcentage de plus de 100% (~ 1 sur 500). Comment puis-je assurer une exécution atomique des 2 appels de fonction?

Comment puis-je assurer une exécution atomique des 2 appels de fonction?

Merci, Sachin

+0

N'existe-t-il aucun moyen de demander directement à Windows l'utilisation du processeur de votre thread? – rmeador

Répondre

2

Votre meilleur choix serait d'attribuer une priorité en temps réel au thread informatique. Les threads en temps réel ne sont préemptés que par d'autres threads en temps réel (ou boostés en priorité en temps réel).

+0

Ceci est encore interruptible. – CPerkins

2

Je ne suis pas sûr que vous pouvez. À moins que vous sachiez quelles sont les opérations sous-jacentes dans chaque fonction, et puisqu'il s'agit d'appels API Windows ... bonne chance.

Ne serait-il pas possible de simplement ajuster pour les pourcentages supérieurs à 100?

perc = (perc > 100.0f) ? 100.0f : perc; 
1

Malheureusement, il n'y a aucun moyen. Entre deux appels système dans Win32, il n'y a aucun moyen d'empêcher votre processus/thread d'être désactivé. Autrement, il serait trivial que quelqu'un mette en place un processus qui verrouille le système en refusant que tout soit éteint.

1

L'appel des fonctions dans l'ordre inverse aiderait-il? (99% est supérieur à 101% ...)

De plus, si vous forcez un changement de contexte juste avant de le faire (par exemple en appelant Sleep()), vous réduirez probablement les chances de désactivation. Je ne sais pas si ça marcherait bien.

Questions connexes