2008-12-30 17 views
5

Estoy pensando en hacer llamadas repetidas (spinning) a QueryPerformanceCounter en dos subprocesos que estarán activos al mismo tiempo. No estoy seguro de si esto es realmente un problema, ya que no he visto nada escrito al respecto, pero ¿es seguro el subproceso QueryPerformanceCounter?QueryPerformanceCounter and thread safety

Gracias

Respuesta

1

que depende de donde vive su argumento para QueryPerformanceCounter. Si se trata de una variable compartida entre los dos hilos, no parece que la función sea segura para subprocesos.

Así que en lugar recomiendo que cada hilo tiene su propio LARGE_INTEGER para pasar a sus llamadas a QPC. Cada llamada es independiente de la otra, y debe actualizar las respectivas LARGE_INTEGER s de manera apropiada.

El MSDN article en esta función también insinúa en setting an affinity mas k si se encuentra en un entorno de multiprocesador.

1

estoy pensando en hacer repetidas llamadas (spinning) a QueryPerformanceCounter en dos hilos que estarán activas al mismo tiempo.

Oog. Piensa en lo que estás haciendo y en cuántos procesadores están disponibles. Si tiene un procesador, esto no funcionará: no pueden estar "activos al mismo tiempo" porque QueryPerformanceCounter no cede el control de un hilo a otro. Estoy bastante seguro de que el cambio de hilo en win32 con procesadores únicos tiene una granularidad de tiempo del orden de 1 ms.

Si tiene varios procesadores, se pueden obtener resultados glitchy (en teoría - que no tienen un PC multiprocesador por lo que no se han observado esto mismo). Se puede encontrar una discusión más divertida de QPC en Internet (ver el blog Raymond Chen's, por ejemplo)

Si realmente quieres girar-esperar para optimizar el tiempo, te sugiero que preguntes la mejor manera de hacerlo en una de las foros de programación de juegos donde hay expertos en tales cosas.