|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
[Java] eseguire n azioni in un determinato arco temporale
Ciao ragazzi, mi è stato assegnato un lavoro ma non so come gestire una parte di questo. L'utente configurerà una percentuale, di una determinata azione da compiere, non è importante credo, per ogni fascia oraria, qualcosa del genere
8.00-9.00 : 7% 9.00-10.00: 8% 10.00-11.00: 7% e via dicendo insomma. Sarebbe anche carino se per esempio quel 7% di azioni da compiere nella prima ora sia più o meno spalmato lungo tutti i 60 minuti e non tutte nel primo minuto per dire ![]() Qualcuno ha mai avuto a che fare con cose schedulate nel tempo? Se qualcuno ha qualche suggerimento da darmi e/o ha qualche framework utile al caso da consigliarmi gliene sarei molto grato. Grazie ![]() |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Quote:
![]() Edit: mmm, l'azione è sempre la stessa ma con parametri differenti diciamo. Ultima modifica di ndakota : 18-10-2011 alle 13:49. |
|
![]() |
![]() |
![]() |
#4 |
Junior Member
Iscritto dal: Jul 2011
Messaggi: 14
|
Inserisci un timer e ad ogni millisecondo controlli l'ora del computer e dopo vai di condizioni if...
if(ora del computer == ora) { fai questo quello e quell'altro. } |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: May 2001
Messaggi: 12847
|
Quote:
Ad ogni modo parliamo di percentuale di tempo o di azione, perché tra le due può esserci una differenza abissale. Nel primo caso per spalmare basta calcolarsi una sleep opportuna . Nel secondo caso invece devi quantificare quanto sia l'1% di qualcosa. Ultima modifica di WarDuck : 18-10-2011 alle 16:12. |
|
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Dec 2001
Città: Cernobbio -Co-
Messaggi: 47
|
Premetto che non ho capito cosa rappresenta la percentuale, quando io ho a che fare con problemi del genere ricorro alle classi Timer e TimerTask che servono proprio per eseguire "qualcosa" dopo un determinato periodo di tempo.
Se riesci ad essere un po' più chiaro, magari posso darti qualche idea in più
__________________
micheledellatorre.net |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Dunque si tratta di inviare campagna di sms(insieme di sms con una data di invio comune). In particolare, gli utenti per ogni nuova campagna imposteranno delle percentuali. Per esempio.
8.00 - 9.00: 7% 9.00 -10.00: 8% 10.00-11.00: 8% 11.00-12.00: 7% E via dicendo per un intera giornata. Il totale degli sms della campagna è risaputo quindi non c'è nessun problema a calcolare le percentuali. Il problema è come inviarne il 7% tra le 8 e le 9 ecc? E' più chiaro ora? Anche se non penso sia molto importante sapere che si tratta dell'invio di messaggi. |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Aug 2011
Messaggi: 672
|
Immagino che conosci la quantità totale di sms per giornata no?
Quindi sai anche il numero effettivo di sms equivalente al 7%. Allora dovresti anche poterti calcolare l'intervallo di tempo tra un sms e l'altro. Così puoi utilizzare un ciclo, molto banalmente Per esempio: Codice:
while(inviati < totali) {invia sms(); sleep(tempoCalcolato);} |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Aug 2011
Messaggi: 672
|
anche se la cosa migliore sarebbe schedulare le azioni su Cron!
Ogni qual volta l'utente sceglie le percentuali e tutto il resto, il programma dovrebbe effettuare i calcoli suddetti e modificare la tabella di Cron |
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: Dec 2001
Città: Cernobbio -Co-
Messaggi: 47
|
Adesso è decisamente più chiaro
![]() Così a naso direi che col Timer te la puoi cavare tranquillamente. Un'ipotesi è quella di usare un unico task di invio che scheduli come ricorrente ogni X minuti: sapendo che ore sono e quanti task all'ora vengono eseguiti, puoi sapere quanti e quali messaggi inviare. Un'altra ipotesi è quella di schedulare tanti task nel momento in cui l'utente dà l'ok, passando al costruttore del task stesso i messaggi da inviare. La parte su cui bisogna riflettere di più riguarda però quanto spesso e in che modo ti vengono modificate le impostazioni temporali e, soprattutto, l'elenco dei numeri di telefono a cui inviare i messaggi, per essere certo di non "perdere pezzi" per strada
__________________
micheledellatorre.net |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Che io sappia la classe Timer è deprecata e l'uso è sconsigliato. Dovrebbe essere più facile usare uno ScheduledExecutorService e aggiungere un Runnable tramite scheduleAtFixedRate. Sapendo percentuale e numero di sms da inviare è banale calcolare ogni quanti ms deve chiamare la run().
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Per adesso il problema è rientrato. Per pagare meno riciclano la vecchia soluzione, anche se non fa esattamente quello che vogliono. Probabilmente in futuro riupperò il thread
![]() |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Aug 2011
Messaggi: 672
|
Spilorci!
![]() Qual'era la vecchia soluzione? |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
|
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1696
|
Tutto ciò mi ricorda uno dei miei primi lavori: geocodifica degli indirizzi (circa 2000) presenti in un file excel; ovviamente all'epoca (16 anni) ero un totale ignorante (e il committente mi disse di fare così) quindi li cercavo un Google Maps (o un analogo) e riportavo le coordinate in excel.
![]()
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO |
![]() |
![]() |
![]() |
#16 | ||
Member
Iscritto dal: Dec 2001
Città: Cernobbio -Co-
Messaggi: 47
|
Quote:
Quote:
__________________
micheledellatorre.net |
||
![]() |
![]() |
![]() |
#17 | ||
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Quote:
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
||
![]() |
![]() |
![]() |
#18 | |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
![]() Chiedo venia. |
|
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Semplicemente la vecchia soluzione non fa la spartizione nelle varie ore. Quindi i clienti chiamano tutti insieme e il call center si intasa. E continuerà a intasarsi a quanto pare
![]() |
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Aug 2011
Messaggi: 672
|
Non hanno mai sentito parlare di efficienza evidentemente
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:54.