Thread obsoleto Timer che agiscono in parallelo

gedamial

Utente Senior
Autore del topic
9 Giugno 2010
1.937
69
Miglior risposta
0
Salve.

Sarò breve.

Ho due timer:

Primo timer
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Secondo timer
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Se faccio partire il primo timer e subito dopo il secondo timer, quello che ottengo due secondi dopo è il messaggio DUE: questo perchè, probabilmente, il secondo timer (partito per ultimo) ha rimpiazzato il primo (partito per primo).

Vorrei invece che vengano eseguiti entrambi in parallelo. Se faccio partire il primo e subito dopo il secondo, vorrei che ENTRAMBI i messaggi escano fuori e non solo il secondo.

Come risolvere?

Grazie in anticipo!
 
Fai un box che riconosce il primo timer e un box che riconosce il secondo definendoli.

Inviato dal mio GT-S5570 con Tapatalk 2
 
Salve.

Sarò breve.

Ho due timer:

Primo timer
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Secondo timer
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Se faccio partire il primo timer e subito dopo il secondo timer, quello che ottengo due secondi dopo è il messaggio DUE: questo perchè, probabilmente, il secondo timer (partito per ultimo) ha rimpiazzato il primo (partito per primo).

Vorrei invece che vengano eseguiti entrambi in parallelo. Se faccio partire il primo e subito dopo il secondo, vorrei che ENTRAMBI i messaggi escano fuori e non solo il secondo.

Come risolvere?

Grazie in anticipo!

ma hai avviato tutti e due i timer ?
no il primo timer non ha rimpiazzato il secondo e viceversa
@nothing C++.net , il codice viene eseguito all'evento Timer_Tick :soso:
 
Nell'evento Timer_Tick eseguite una Sleep ? Che senso ha ?

eseguite , al max esegue ... che ne so io che senso ha :| , tra l'altro non è vietato mettere in pausa il thread del timer :soso: @gedamial comunque dovresti vedere sia il primo messaggio ("uno") che il secondo messaggio ("due")
 
@TBH @nothing @vinnythebest

Il codice intero è il seguente:

timer1_tick
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!


timer2_tick
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Il primo timer aspetta 2 minuti prima di far partire l'audio, il secondo invece aspetta un solo minuto.

Se io premo prima F12 e poi F11, l'unico suono che sentirò sarà il suono che arriva dopo due minuti (quello del timer1). In realtà però io ho premuto prima F12, quindi dopo un minuto avrei dovuto sentire l'avviso del secondo timer e solo SUCCESSIVAMENTE quello del primo.

Come se l'F11 togliesse da mezzo l'F12
 
@TBH @nothing @vinnythebest

Il codice intero è il seguente:

timer1_tick
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!


timer2_tick
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Il primo timer aspetta 2 minuti prima di far partire l'audio, il secondo invece aspetta un solo minuto.

Se io premo prima F12 e poi F11, l'unico suono che sentirò sarà il suono che arriva dopo due minuti (quello del timer1). In realtà però io ho premuto prima F12, quindi dopo un minuto avrei dovuto sentire l'avviso del secondo timer e solo SUCCESSIVAMENTE quello del primo.

Come se l'F11 togliesse da mezzo l'F12

il codice cosi come è scritto equivale a tener premuto o f11 o f12 :emoji_relieved:.. poi magari AVVISO_DUE->Play() , potresti scrivere cosa fa il metodo Play?
 
@TBH
Eseguite nel senso che non vi ponete il problema e quindi va bene anche per voi ...

Non è vietato usare una Sleep nel Tick di un Timer ma temo che @gedamial stia facendo una grande confusione tra il Timer e la Sleep ... Perché la Sleep se c'è già il Timer ??

Ogni quanto viene chiamato il Timer1 e ogni quanto viene chiamato il Timer2 ?
 
Si, si trova nel Tick

Il codice completo l'ho scritto prima :|

La pausa , in questo caso non serve, esiste già il tick(se esistono delle proprietà in .Net bisogna sfruttarle :soso:emoji_slight_smile: , ogni tot tempo fa l'azione e nel frattempo non lavora (per esempio mettere un tick di 60000ms) .
-Secondo punto perché usare due timer??
se devi controllare che sia stato premuto un tasto basta un timer con una funzione che controlla i tasti premuti e restituisce un valore (flag qualsiasi cosa tu voglia) se è stato premuto f11 o f12 se il riscontro è positivo riproduco il rispettivo audio.
 
-Secondo punto perché usare due timer??
se devi controllare che sia stato premuto un tasto basta un timer con una funzione che controlla i tasti premuti e restituisce un valore (flag qualsiasi cosa tu voglia) se è stato premuto f11 o f12 se il riscontro è positivo riproduco il rispettivo audio.

Già ho usato questa alternativa.

Metto un timer con i due controlli dentro (per l'f11 e l'f12).

Se viene premuto F11 "checkkato" il radioButton "Fortezza", allora deve aspettare 2 min prima di emettere l'audio.
Se, al posto di F11, viene premuto F12, ma il radioButton selezionato è SEMPRE "Fortezza" allora aspetta un minuto ed emetti l'audio.

Questo "aspetta uno/due minuto/i" l'ho tradotto in Thread :: Sleep

Se premo F12 e subito dopo F11 io sentirò solo l'audio di 2 minuti dopo (ovvero quello di F11) e non in ordine temporale, come vorrei che sia.

Ora, il fatto che il suono dell' F12 non lo sento proprio è causato dal fatto che l'F11 premuto subito dopo interferisce, passando in evidenza.

Questo perché? Perché uso Sleep()?
 
Già ho usato questa alternativa.

Metto un timer con i due controlli dentro (per l'f11 e l'f12).

Se viene premuto F11 "checkkato" il radioButton "Fortezza", allora deve aspettare 2 min prima di emettere l'audio.
Se, al posto di F11, viene premuto F12, ma il radioButton selezionato è SEMPRE "Fortezza" allora aspetta un minuto ed emetti l'audio.

Questo "aspetta uno/due minuto/i" l'ho tradotto in Thread :: Sleep

Se premo F12 e subito dopo F11 io sentirò solo l'audio di 2 minuti dopo (ovvero quello di F11) e non in ordine temporale, come vorrei che sia.

Ora, il fatto che il suono dell' F12 non lo sento proprio è causato dal fatto che l'F11 premuto subito dopo interferisce, passando in evidenza.

Questo perché? Perché uso Sleep()?

no, non per questo , ma di per se è sbagliata come soluzione ... dato che non controlli se sia passato effettevimante il tempo da quando hai premuto f11 ... Per esempio se io premo f11 avvio la pausa , ma l'altro timer continua a lavorare e nel frattempo premo f12 avvio anche l'altra pausa questo susseguirsi di azioni incontrollate fan si che magari f12 venga eseguito prima o dopo rispetto l'ordine in cui è stato premuto. Senza contare eventuali errori in altre parti del codice

Potresti postare tutto il codice , compreso quello del load e degli altri eventi . Comunque non perchè devi controllare due tasti devi usare due timer(la tua idea di risoluzione già è sbagliata in partenza)
ti posto la soluzione in "pseudocodice"

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
 
Ultima modifica: