Infinito durante l'utilizzo della CPU del ciclo

3

Sto codificando uno script in C, che controllerà costantemente una serie di eventi, l'idea è di verificare se la data e l'ora di un determinato evento sono pari al tempo corrente e attivare qualcosa, sto facendo questo con un po '(1) {}, ma questo approccio causa un elevato utilizzo della CPU, hai qualche suggerimento su come posso farlo con un utilizzo della CPU inferiore?

    
posta David T 17.09.2014 - 17:50
fonte

2 risposte

3

Il modo migliore è tenere traccia di ciò che è la prossima volta che aggiungi l'array, quindi dormi fino a quel momento.

Quindi, quando si aggiunge un nuovo evento all'array, è necessario decidere se verrà innescato prima o dopo rispetto al "prossimo evento" attualmente memorizzato. Quindi il loop si limita a dormire (magari svegliandosi periodicamente ogni secondo circa per stampare una diagnostica "Sto ancora funzionando").

Questo richiederà un thread che si attivi per attivare l'evento deve essere sincronizzato con un mutex, quindi può essere svegliato prematuramente se viene aggiunto un nuovo evento che sta per essere sparato prima del prossimo evento corrente. Questo thread quindi ricalcola la prossima volta, imposta il mutex e attende che venga attivato nuovamente o che si verifichi un timeout in cui il timeout sarà la giusta quantità di tempo per attendere il tempo dell'evento successivo.

    
risposta data 17.09.2014 - 18:05
fonte
2

La soluzione rapida e sporca consiste nell'aggiungere una chiamata a riposo per fornire il processore ad altre applicazioni. Ciò riduce enormemente l'utilizzo della CPU.

Se possibile, una soluzione migliore è invocare il metodo in un callback. Ad esempio, la gestione degli eventi dell'interfaccia utente Win32 consente di registrare i callback per eventi specifici.

    
risposta data 17.09.2014 - 18:03
fonte

Leggi altre domande sui tag