View Full Version : [C/C++] uscire da un ciclo infinito
solitamente quando imposto un ciclo infinito del tipo
while(1)
{
}
setto in ambiente Borland Builder
bool bAbort = false;
while(1)
{
Application->ProcessMessage();
if(bAbort == true) break;
}
chi mette a true la variabile bAbort è un Button ma lo svantaggio di questa tecnica è che sottrae molte risorse in termini di CPU. So che vi sono metodi molto più precisi per fermare un loop del tipo esposto ma non ne conosco l'implementazione :stordita:
grazie
Innanzitutto metti while(!bAbort) oppure while(bAbort == false) perché quel while(1) e poi il break non si può vedere :p
Non sono un grande esperto di GUI ma per fare una cosa del genere, che io sappia, solitamente si usano più thread e quello che gestisce quel ciclo ha uno sleep di qualche millisecondo in modo che quel tempo macchina possa essere dedicato ad altri thread.
In genere le GUI hanno un loro thread per gestire gli eventi, e a questi eventi possono essere associate alcune funzioni che fanno da callback.
Ora non so precisamente cosa devi fare, comunque se devi fare un semplice polling è corretto come dice Torav, ti basta mettere una sleep all'interno del ciclo.
while(!bAbort)
{
// fai quello che devi fare
sleep(10); // dorme 10ms.
}
Ovviamente il periodo del polling dipende da quello che devi fare, e da quanto rapidamente vuoi gestire gli eventi.
Credo che 10-20ms siano un tempo accettabile per l'utente che preme il tasto e vuole immediatamente vedere effettuata un'azione.
In genere le GUI hanno un loro thread per gestire gli eventi, e a questi eventi possono essere associate alcune funzioni che fanno da callback.
Ora non so precisamente cosa devi fare, comunque se devi fare un semplice polling è corretto come dice Torav, ti basta mettere una sleep all'interno del ciclo.
while(!bAbort)
{
// fai quello che devi fare
sleep(10); // dorme 10ms.
}
Ovviamente il periodo del polling dipende da quello che devi fare, e da quanto rapidamente vuoi gestire gli eventi.
Credo che 10-20ms siano un tempo accettabile per l'utente che preme il tasto e vuole immediatamente vedere effettuata un'azione.
grazie a entrambi.
Difatti avendo in esecuzione due thread che ciclano all'infinito, il pulsante che rende bAbort=true; viene interrogato anche senza usare la chiamata a Application->ProcessMessage() :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.