Domanda

Ho due chiamate di sistema GetSystemTime () e GetThreadTimes () di cui ho bisogno per calcolare l'utilizzo della CPU da un determinato thread Win32.

Per motivi di accuratezza, devo assicurarmi che sia GetSystemTime () che GetThreadTimes () siano eseguiti atomicamente; cioè non ci dovrebbe essere alcun cambio di contesto tra una chiamata a GetSystemTime () & amp; GetThreadTimes ().

Il motivo è che occasionalmente finisco con una percentuale di oltre il 100% (~ 1 su 500).

Come posso garantire un'esecuzione atomica delle 2 chiamate di funzione?

Grazie, Sachin

È stato utile?

Soluzione

La tua scommessa migliore sarebbe assegnare una priorità in tempo reale al thread di elaborazione. I thread in tempo reale vengono preimpostati solo da altri thread in tempo reale (o quelli potenziati alla priorità in tempo reale).

Altri suggerimenti

Non sono così sicuro che puoi. A meno che tu non sappia quali sono le operazioni sottostanti in ciascuna funzione e dal momento che sono chiamate API di Windows ... buona fortuna.

Non sarebbe possibile regolare solo per percentuali superiori a 100?

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

Purtroppo non c'è modo. Tra due chiamate di sistema in Win32 non c'è modo di impedire che il tuo processo / thread venga scambiato nel contesto. Altrimenti sarebbe banale per qualcuno implementare un processo che ha bloccato il sistema rifiutando di uscire.

Sarebbe utile chiamare le funzioni nell'ordine opposto? (Il 99% è migliore del 101% ...)

Inoltre, se imponi un cambio di contesto appena prima di farlo (ad esempio chiamando Sleep ()), probabilmente ridurrai le possibilità di passare. Non so quanto funzionerebbe comunque.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top