Autore Topic: [RISOLTO] Pulire la coda degli eventi  (Letto 663 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.725
  • Ne mors quidem nos iunget
    • Mostra profilo
[RISOLTO] Pulire la coda degli eventi
« il: 18 Aprile 2012, 19:42:55 »
Quale istruzione per pulire la coda di un evento (ad esempio un _Enter() o un _MouseDown()) ?
« Ultima modifica: 24 Aprile 2012, 18:47:32 da 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 md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Pulire la coda degli eventi
« Risposta #1 il: 19 Aprile 2012, 10:46:56 »
Cosa intendi con il voler pulire la coda eventi?

Gli eventi vengono comunque emessi ed intercettati dal gestore standard, a meno che siano stati creati metodi personalizzati.

Pulire in runtime la coda a livello globale, mentre il tutto è in esecuzione, creerebbe grossi problemi, tenendo presente che già la classe Application che, anche se non direttamente usata, è sempre attiva e presente, e ha i suoi di eventi.

Ad ogni modo, per rispondere alla tua domanda, NO, non mi risulta ci sia modo di pulire il processo.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.725
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Pulire la coda degli eventi
« Risposta #2 il: 19 Aprile 2012, 11:38:50 »
Ad ogni modo, per rispondere alla tua domanda, NO, non mi risulta ci sia modo di pulire il processo.
Mah... avevo usato il WAIT e nell'attesa mi poteva capitare che scatenassi più volte l'evento _Enter() anche involontariamente. Quindi alla fine dell'attesa del WAIT il programma procedeva ad attuare tutti quegli eventi che nel frattempo si erano evidentemente accodati.
Va be', poi ho risolto sostituendo il WAIT con il Timer, facendo in modo da... scaricare con un Return gli eventuali eventi _Enter() da me non volontariamente determinati.
La domanda comunque l'ho lasciata per sapere.


Ad ogni modo, per rispondere alla tua domanda, NO, non mi risulta ci sia modo di pulire il processo.
Bene, mi basta per porre Risolto.
« Ultima modifica: 19 Aprile 2012, 11:42:00 da 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 fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: [RISOLTO] Pulire la coda degli eventi
« Risposta #3 il: 19 Aprile 2012, 12:09:58 »
può essere che nella tua situazione possa funzionare un :

Codice: [Seleziona]
STOP EVENT

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.725
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: [RISOLTO] Pulire la coda degli eventi
« Risposta #4 il: 19 Aprile 2012, 13:21:48 »
può essere che nella tua situazione possa funzionare un :

Codice: [Seleziona]
STOP EVENT

Mi era venuto in mente, poi ho scelto il Timer... comunque a miei fini didattici lo proverò.
« 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 md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: [RISOLTO] Pulire la coda degli eventi
« Risposta #5 il: 19 Aprile 2012, 14:06:55 »
STOP EVENT è legato al singolo evento.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.725
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: [RISOLTO] Pulire la coda degli eventi
« Risposta #6 il: 19 Aprile 2012, 16:34:19 »
Parliamo un po' con il codice...

Allora, con una situazione iniziale come questa:
Codice: gambas [Seleziona]

Public Sub Label1_Enter()

  Wait 4

  Print "Alibaba"

End

...se durante quei 4 secondi passo all'interno della Label1 con il topastro ⁓O⑆ avrò al termine di quei secondi la scritta in console tante volte quante il muso del ratto è entrato nella Label.


Bene....
allora ho usato il Timer, come ho detto in precedenza, l'evento avviene ogni volta che il mouse entra nella Label1, ma si scatena e così non v'è coda:
Codice: gambas [Seleziona]

Public Sub Label1_Enter()

  Timer1.Enabled = True

' se si entrerà nell'area della Label1 fin tanto che la variabile "a" è minore di 20,
' allora l'evento si "scaricherà" nel... nulla eterno:
  If a < 20 Then Return

' Quando invece sarà raggiunto il valore 20,
' il processo passerà da qui:
  Print "Alibaba"

End


Public Sub Timer1_Timer()

 Timer1.Delay = 100

  If a = 30 Then Timer1.Enabled = False

 Inc a

End



Poco fa ho fatto qualche prova nuovamente con il WAIT, usando un escamotage più brutale  :devil: :
Codice: gambas [Seleziona]

Private tempo As Byte


Public Sub Label1_Enter()

  Inc tempo

' anche in questo caso l'evento si scatena,
' ma si scarica nel... vuoto infinito galattico:
  If tempo > 1 Then Return

   Wait 3
 
  Print "Alibaba"
 
  tempo = 0
 
End

...in questo modo la scrittura in console avverrà soltanto una volta.
Se al posto di Return uso Stop Event, l'escamotage non funziona come desiderato.
« 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 fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: [RISOLTO, ma ancora in discussione :-) ] Pulire la coda degli eventi
« Risposta #7 il: 19 Aprile 2012, 17:23:00 »
io intendevo qualcosa del tipo:

Codice: gambas [Seleziona]

private premuto as boolean
PUBLIC SUB Label1_Enter()

IF premuto = FALSE THEN
  
 PRINT "Alibaba"  
 premuto = TRUE
ELSE
STOP EVENT
ENDIF
  
END  

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.725
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: [RISOLTO, ma ancora in discussione :-) ] Pulire la coda degli eventi
« Risposta #8 il: 19 Aprile 2012, 22:33:11 »
io intendevo qualcosa del tipo:

uhmmm.... sì, capisco, ma... diciamo che il mio caso prevede comunque una temporizzazione, che scatta al primo sollevarsi dell'evento in questione, e che poi deve ri-scattare solo dopo che è trascorso appunto il tempo stabilito. Ecco perché l'uso sperimentale di Wait e del Timer.
« Ultima modifica: 20 Aprile 2012, 16:42:24 da 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. »