Pregunta

Tengo dos llamadas al sistema GetSystemTime () y GetThreadTimes () que necesito para calcular la utilización de la CPU por un subproceso Win32 dado.

En aras de la precisión, necesito asegurarme de que tanto GetSystemTime () como GetThreadTimes () se ejecuten atómicamente; es decir, no debería haber cambio de contexto entre una llamada a GetSystemTime () & amp; GetThreadTimes ().

La razón es que ocasionalmente termino con un porcentaje de más del 100% (~ 1 en 500).

¿Cómo puedo asegurar una ejecución atómica de las 2 llamadas de función?

Gracias Sachin

¿Fue útil?

Solución

Su mejor opción sería asignar un hilo informático a una prioridad en tiempo real. Los subprocesos en tiempo real solo son reemplazados por otros subprocesos en tiempo real (o los que tienen prioridad en tiempo real).

Otros consejos

No estoy tan seguro de que puedas. A menos que sepa cuáles son las operaciones subyacentes en cada función, y dado que son llamadas API de Windows ... buena suerte.

¿No sería posible ajustar solo los porcentajes superiores a 100?

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

Lamentablemente no hay manera. Entre dos llamadas al sistema en Win32 no hay forma de evitar que su proceso / hilo se cambie de contexto. De lo contrario, sería trivial para alguien implementar un proceso que bloqueara el sistema al negarse a que se desconectaran.

¿Ayudaría llamar a las funciones en el orden opuesto? (99% es mejor que 101% ...)

Además, si fuerza un cambio de contexto justo antes de hacer esto (por ejemplo, llamando a Sleep ()), probablemente reducirá las posibilidades de ser desconectado. Sin embargo, no sé qué tan bien funcionaría eso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top