2008-12-30 10 views
5

Je pense à faire des appels répétés (spinning) à QueryPerformanceCounter dans deux threads qui seront actifs en même temps. Je ne suis pas sûr que ce soit vraiment un problème car je n'ai rien vu d'écrit à ce sujet, mais le thread QueryPerformanceCounter est-il sûr?QueryPerformanceCounter et la sécurité des threads

Merci

Répondre

1

Cela dépend de l'endroit où vit votre argument QueryPerformanceCounter. S'il s'agit d'une variable partagée entre les deux threads, cela ne semble pas être une fonction thread-safe.

Donc, je recommande que chaque thread ait ses propres LARGE_INTEGER pour passer à vos appels à QPC. Chaque appel est indépendant de l'autre et doit mettre à jour les LARGE_INTEGER s de façon appropriée. Le MSDN article de cette fonction indique également setting an affinity mas k si vous travaillez dans un environnement multiprocesseur.

1

Je pense à faire des appels répétés (filature) à QueryPerformanceCounter dans deux threads qui seront actifs en même temps.

Oog. Pensez à ce que vous faites et combien de processeurs sont disponibles. Si vous avez un processeur, cela ne fonctionnera pas: ils ne peuvent pas être "actifs en même temps" car QueryPerformanceCounter ne cède pas le contrôle d'un thread à l'autre. Je suis à peu près sûr que le thread-switching dans win32 avec des processeurs uniques a une granularité de timing de l'ordre de 1 msec.

Si vous avez plusieurs processeurs, vous pouvez obtenir des résultats glitchy (théoriquement - je n'ai pas de PC multiprocesseur donc je ne l'ai pas observé moi-même). On peut trouver plus de discussions amusantes sur QPC sur Internet (voir Raymond Chen's blog par exemple)

Si vous voulez vraiment attendre pour optimiser le timing, je vous suggère de demander la meilleure façon de le faire sur l'un des forums de programmation de jeux où il y a des experts sur de telles choses.

Questions connexes