Pergunta

Eu tenho duas chamadas do sistema GetSystemTime () e GetThreadTimes () que eu preciso para calcular a utilização da CPU por um determinado segmento Win32.

Por uma questão de precisão, preciso garantir que tanto GetSystemTime () e GetThreadTimes () são executados atomicamente; ou seja, não deve haver troca de contexto entre uma chamada para GetSystemTime () & GetThreadTimes ().

A razão é que, ocasionalmente, acabar com uma percentagem de mais de 100% (~ 1 em 500).

Como posso garantir uma execução atômica das chamadas de função 2?

Obrigado, Sachin

Foi útil?

Solução

Sua melhor aposta seria a atribuição de computação rosca uma prioridade em tempo real. threads em tempo real só são superados por outros tópicos em tempo real (ou os impulsionaram a prioridade em tempo real).

Outras dicas

Eu não estou tão certo que puder. A menos que você sabe o que as operações subjacentes são, em cada função, e desde que estejam chamadas API do Windows ... boa sorte.

Não seria possível apenas ajustar para percentagens mais de 100?

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

Infelizmente não há nenhuma maneira. Entre duas chamadas de sistema no Win32 não há nenhuma maneira de evitar que o seu processo / thread de ser contexto comutada. Caso contrário, seria trivial para alguém para implementar um processo que bloqueado o sistema, recusando-se a cada get comutada.

Será que chamar as funções na ajuda ordem inversa? (99% é melhor do que 101% ...)

Além disso, se você forçar uma mudança de contexto apenas antes de fazer isso (por exemplo, chamando Sleep ()), você vai provavelmente reduzir as chances de ser comutada. Eu não sei o quão bem que iria trabalhar embora.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top