Autore Topic: Come Interrompere l'esecuzione di una Sub  (Letto 1384 volte)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Come Interrompere l'esecuzione di una Sub
« Risposta #15 il: 12 Agosto 2020, 23:17:44 »
Quello che mi lascia un po perplesso nel codice di kicco è che pur essendoci una sola finestra, abbia inserito questo codice:
Codice: [Seleziona]
Public Sub Form_Open()

  Application.MainWindow = Me

End

kicco non è che ne stai fraintendendo il significato?

È la stessa cosa che se tu avessi altre due finestre aperte (Form1 e Form2) e scrivessi in FMain:

Codice: [Seleziona]
Public Sub Form_Close()

  Form1.Close
  Form2.Close

End

Anche se può apparire banale, faccio un'altra precisazione: il codice di vuott deve stare nell'evento Close della finestra che contiene il ciclo.

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Come Interrompere l'esecuzione di una Sub
« Risposta #16 il: 12 Agosto 2020, 23:24:01 »
...il codice di vuott deve stare nell'evento Close della finestra che contiene il ciclo.

Senza specifica e diversa indicazione ho ritenuto che il codice di kicco prevedesse un solo Form.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.728
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Come Interrompere l'esecuzione di una Sub
« Risposta #17 il: 13 Agosto 2020, 09:24:52 »
Quello che mi lascia un po perplesso nel codice di kicco è che pur essendoci una sola finestra, abbia inserito questo codice:
Codice: [Seleziona]
Public Sub Form_Open()

  Application.MainWindow = Me

End

kicco non è che ne stai fraintendendo il significato?

È la stessa cosa che se tu avessi altre due finestre aperte (Form1 e Form2) e scrivessi in FMain:

Codice: [Seleziona]
Public Sub Form_Close()

  Form1.Close
  Form2.Close

End

Anche se può apparire banale, faccio un'altra precisazione: il codice di vuott deve stare nell'evento Close della finestra che contiene il ciclo.

 :ciao:
Nel Programma reale ci sono altre Form e uso proprio quel trucco che ho imparato da te per chiuderle tutte.
Nel caso dell'esempio ovviamente non sarebbe utile.
« Ultima modifica: 13 Agosto 2020, 09:25:37 da kicco »
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.728
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Come Interrompere l'esecuzione di una Sub
« Risposta #18 il: 13 Agosto 2020, 09:51:31 »
Ho corretto la routine del Test1 per renderla più simile all'originale aggiungendo un Wait 5.
Questo perchè applicando sostanzialmente l'esempio di cogier e controllando il flag che forza il Return sia del ciclo principale che dei cicli interni a quello principale, durante quel wait la routine rimane insensibile fino allo scadere dello stesso.
Vedi Test2_a.
Ho dovuto, per risolvere il problema usare al posto del Wait 5, cinque cicli For con un tempo di attesa di 1s controllando il flag ad ogni ciclo e quindi l'eventuale Return.
Vedi Test2_b.
Certo con Quit si risolve tutto anche se con effetto "ghigliottina" con messaggi vari in consolle che sostanzialmente, correggimi Gianluigi, indicano solo che un ciclo era ancora in essere! Non potremmo considerarlo "fisiologico"?
Ti prego, parlami ancora dopo questa affermazione!  :P
« Ultima modifica: 13 Agosto 2020, 10:36:51 da kicco »
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Come Interrompere l'esecuzione di una Sub
« Risposta #19 il: 13 Agosto 2020, 10:33:24 »
Ho corretto la routine del Test1 per renderla più simile all'originale aggiungendo un Wait 5.
Questo perchè applicando sostanzialmente l'esempio di cogier e controllando il flag che forza il Return sia del ciclo principale che dei cicli interni a quello principale, durante quel wait la routine rimane insensibile fino allo scadere dello stesso.
Vedi Test2_a.
Ho dovuto, per risolvere il problema usare al posto del Wait 5, cinque cicli For con un tempo di attesa di 1s controllando il flag ad ogni ciclo e quindi l'eventuale Return.
Vedi Test2_b.
E questo nuovo codice dove lo hai nascosto?
 :mad:
Citazione
Certo con Quit si risolve tutto anche se con effetto "ghigliottina" con messaggi vari in consolle che sostanzialmente, correggimi Gianluigi, indicano solo che un ciclo era ancora in essere! Non potremmo considerarlo "fisiologico"?
:violent:
Citazione
Ti prego, parlami ancora dopo questa affermazione! 

 >:(   :D  :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.728
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Come Interrompere l'esecuzione di una Sub
« Risposta #20 il: 13 Agosto 2020, 10:38:05 »
Citazione
E questo nuovo codice dove lo hai nascosto?
:hard: L'ho allegato adesso al Post!  :-[ :-[ :-[
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Come Interrompere l'esecuzione di una Sub
« Risposta #21 il: 13 Agosto 2020, 11:07:29 »
Citazione
E questo nuovo codice dove lo hai nascosto?
:hard: L'ho allegato adesso al Post!  :-[ :-[ :-[
:D

Scaricato, più tardi ci do un'occhiata  :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Come Interrompere l'esecuzione di una Sub
« Risposta #22 il: 13 Agosto 2020, 11:56:11 »

Ho dovuto, per risolvere il problema usare al posto del Wait 5, cinque cicli For con un tempo di attesa di 1s controllando il flag ad ogni ciclo e quindi l'eventuale Return.
Vedi Test2_b.


Perché secondo te il test b funziona?

Hai provato a chiudere il form dal pulsante della barra?

Qui ci vorrebbe proprio una gif di vuott   :-\
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Come Interrompere l'esecuzione di una Sub
« Risposta #23 il: 13 Agosto 2020, 13:42:27 »
Sarò stupido ma non mi è molto chiaro cosa rappresenta la bandierina effe e perché possa essere governata dai pulsanti.

Comunque se vuoi che funzioni, togli il codice da open e  BtExit e mettilo in close così, come ti era già stato suggerito:

Codice: [Seleziona]
Public Sub Form_Close()

  Application.MainWindow = Me
  bFlag = True

End

Public Sub BtExit_Click()

  Me.close

End

Poi se vuoi che fFlag cambi in false spostalo da dopo il Break e mettilo prima.

Comunque mi sembrava più stimolante il codice di vuott...
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Come Interrompere l'esecuzione di una Sub
« Risposta #24 il: 13 Agosto 2020, 13:58:38 »
Comunque mi sembrava più stimolante il codice di vuott...

« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.728
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Come Interrompere l'esecuzione di una Sub
« Risposta #25 il: 13 Agosto 2020, 15:05:55 »
Sarò stupido ma non mi è molto chiaro cosa rappresenta la bandierina effe e perché possa essere governata dai pulsanti.
Tieni conto che il codice è una riduzione di una routine "reale". La bandierina effe rappresenta un evento esterno provocato da dati seriali.


Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)