Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [VB6]Bloccare un ciclo

    ciao a tutti,
    se si fanno cicli errati (quindi andranno avanti in eterno), come si fà a bloccare il debug?

    es:
    codice:
    a=1
    do while a < 60
     'esegui qualcosa!
    loop

  2. #2
    durante il debug clicca Ctlr+Pausa e il codice si ferma sull'istruzione che deve eseguire

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Si dovrebbe aggiungere all'interno del ciclo una chiamata alla funzione API Sleep che consente al thread primario di restituire momentaneamente il controllo al sistema operativo, evitando di girare al 100% dell CPU (che è probabilmente il motivo per cui, sebbene sia possibile arrestare il progetto, questo non viene consentito per eccessivo impiego della CPU da parte del thread primario dell'applicazione).

    Magari prova e mi saprai dire se ho indovinato.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    CTRL+Pausa funziona a meraviglia.

    Grazie x 10000000

  5. #5
    Originariamente inviato da lbottoni
    CTRL+Pausa funziona a meraviglia.

    Grazie x 10000000
    di niente

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  6. #6
    Moderatore di CMS L'avatar di kalosjo
    Registrato dal
    Jul 2001
    residenza
    In culo alla luna
    Messaggi
    1,999
    Originariamente inviato da alka
    Si dovrebbe aggiungere all'interno del ciclo una chiamata alla funzione API Sleep che consente al thread primario di restituire momentaneamente il controllo al sistema operativo, evitando di girare al 100% dell CPU (che è probabilmente il motivo per cui, sebbene sia possibile arrestare il progetto, questo non viene consentito per eccessivo impiego della CPU da parte del thread primario dell'applicazione).

    Magari prova e mi saprai dire se ho indovinato.

    Ciao!
    Molto più semplice e logico inserire una istruzione doevents, che fa si che vengano processati gli eventi di sistema (come il click del mouse)
    Scusate i puntini di sospensione...... La verità è che non ho argomenti....

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Originariamente inviato da kalosjo
    Molto più semplice e logico inserire una istruzione doevents, che fa si che vengano processati gli eventi di sistema (come il click del mouse)
    Che sia semplice, forse... che sia logico, assolutamente no.

    Non si tratta della stessa cosa: DoEvents processa tutti i messaggi, anche i clic e tutto il resto, comportanto tutti gli eventi collaterali del caso ai quali è necessario prendere provvedimenti (ad esempio, disabilitare i controlli visuali, inibire la chiusura del form e così via).

    D'altronde, la programmazione multithreading - a meno di salti mortali (leggere "ricorrere alle API", con molta fatica) - è esclusa in Visual Basic 6, pertanto qualsiasi "manovra" è da considerarsi un puro espediente nel tentativo di aggirare una limitazione dell'ambiente di sviluppo.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  8. #8
    Moderatore di CMS L'avatar di kalosjo
    Registrato dal
    Jul 2001
    residenza
    In culo alla luna
    Messaggi
    1,999
    Originariamente inviato da alka
    Che sia semplice, forse... che sia logico, assolutamente no.

    Non si tratta della stessa cosa: DoEvents processa tutti i messaggi, anche i clic e tutto il resto, comportanto tutti gli eventi collaterali del caso ai quali è necessario prendere provvedimenti (ad esempio, disabilitare i controlli visuali, inibire la chiusura del form e così via).

    D'altronde, la programmazione multithreading - a meno di salti mortali (leggere "ricorrere alle API", con molta fatica) - è esclusa in Visual Basic 6, pertanto qualsiasi "manovra" è da considerarsi un puro espediente nel tentativo di aggirare una limitazione dell'ambiente di sviluppo.

    Ciao!


    Scusa, forse sono stato duro (per la velocità....)

    Non intendevo quello che sembrava, volevo solo dare una soluzione alternativa....
    Scusate i puntini di sospensione...... La verità è che non ho argomenti....

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Originariamente inviato da kalosjo
    Scusa, forse sono stato duro (per la velocità....)
    Non intendevo quello che sembrava, volevo solo dare una soluzione alternativa....
    Nessun problema, ci mancherebbe.

    Ad ogni modo, sembra che i disguidi del "ciclo infinito" non fossero riferiti ad un programma funzionante in cui è necessario farlo, ma ad una semplice condizione che impedisce - durante il debugging - di arrestare il programma.

    In sostanza, il problema - se ho capito bene - è nell'utilizzo dell'ambiente di sviluppo per arrestare un simile ciclo piuttosto che nel gestirlo in modo appropriato quando esso si verifica (in condizioni di normali funzionamento di un programma definitivo).

    Se mi sono sbagliato, attendo correzioni.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  10. #10
    si parlavo in fase di debug.Per quanto riguarda il DOevents è già presente nel codice.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.