Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-04-2011, 18:30   #1
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
[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
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2011, 22:33   #2
Torav
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.
Torav è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2011, 08:50   #3
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 13043
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.
}
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.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2011, 11:07   #4
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
Quote:
Originariamente inviato da WarDuck Guarda i messaggi
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.
}
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()
misterx è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
La prima missione orbitale del razzo spa...
Servizi in streaming sempre più c...
Anteprima della Leapmotor B03X: inizia l...
Anthropic accusa la Cina: Claude utilizz...
I satelliti Rassvet (Starlink russo) di ...
Un agente IA ha risolto un problema su W...
Cina: la CMSA potrebbe cambiare parte de...
68 mensilità di bonus per i dipen...
Rocket Lab ha fatto ricorso contro la de...
Nutanix rende disponibile Azure Virtual ...
Il padrino del deep learning avverte: gl...
Il finto avviso "iPhone Storage is Full"...
Dietrofront in Cina, addio touchscreen p...
Un piccolo accessorio trasforma lo smart...
Dopo 370 anni il Cyphral Distich non è p...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 04:51.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v