Question

J'ai deux appels système GetSystemTime () et GetThreadTimes () nécessaires pour calculer l'utilisation du processeur par un thread Win32 donné.

Par souci de précision, je dois m'assurer que GetSystemTime () et GetThreadTimes () sont exécutés de manière atomique. c'est-à-dire qu'il ne devrait y avoir aucun changement de contexte entre un appel à GetSystemTime () & amp; GetThreadTimes ().

La raison en est que parfois je me retrouve avec un pourcentage supérieur à 100% (~ 1 sur 500).

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

Merci, Sachin

Était-ce utile?

La solution

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

Autres conseils

Je ne suis pas sûr que vous puissiez le faire. Si vous ne connaissez pas les opérations sous-jacentes de chaque fonction, et comme il s’agit bien d’appels d’API Windows ... bonne chance.

Ne serait-il pas possible d’ajuster les pourcentages supérieurs à 100?

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

Malheureusement, il n'y a pas moyen. Entre deux appels système dans Win32, il n’ya aucun moyen d’empêcher que votre processus / thread ne soit hors contexte. Sinon, il serait facile pour quelqu'un de mettre en œuvre un processus qui verrouille le système en refusant de se faire déconnecter.

Appeler les fonctions dans l’ordre inverse aiderait-il? (99% est meilleur que 101% ...)

De même, si vous forcez un changement de contexte juste avant de le faire (par exemple, en appelant Sleep ()), vous réduirez probablement les risques de substitution. Je ne sais pas si cela fonctionnerait bien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top