|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
[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 ![]() grazie |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Dec 2005
Messaggi: 558
|
Innanzitutto metti while(!bAbort) oppure while(bAbort == false) perché quel while(1) e poi il break non si può vedere
![]() 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. |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: May 2001
Messaggi: 12849
|
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. Codice:
while(!bAbort) { // fai quello che devi fare sleep(10); // dorme 10ms. } Credo che 10-20ms siano un tempo accettabile per l'utente che preme il tasto e vuole immediatamente vedere effettuata un'azione. |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Quote:
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() ![]() |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:18.