| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  18-10-2011, 11:31 | #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   | 
|   |   | 
|  18-10-2011, 14:47 | #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 14:49. | |
|   |   | 
|  18-10-2011, 14:50 | #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. } | 
|   |   | 
|  18-10-2011, 17:08 | #5 | |
| Senior Member Iscritto dal: May 2001 
					Messaggi: 12860
				 | 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 17:12. | |
|   |   | 
|  18-10-2011, 20:16 | #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 | 
|   |   | 
|  18-10-2011, 21:16 | #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. | 
|   |   | 
|  18-10-2011, 21:48 | #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)
{ | 
|   |   | 
|  18-10-2011, 21:53 | #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 | 
|   |   | 
|  18-10-2011, 21:56 | #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 | 
|   |   | 
|  19-10-2011, 07:02 | #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().
		 | 
|   |   | 
|  19-10-2011, 12:33 | #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    | 
|   |   | 
|  19-10-2011, 15:01 | #13 | 
| Senior Member Iscritto dal: Aug 2011 
					Messaggi: 672
				 | 
		Spilorci!    Qual'era la vecchia soluzione? | 
|   |   | 
|  19-10-2011, 15:18 | #14 | 
| Senior Member Iscritto dal: Oct 2001 
					Messaggi: 11471
				 | |
|   |   | 
|  19-10-2011, 15:55 | #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 | 
|   |   | 
|  19-10-2011, 16:17 | #16 | ||
| Member Iscritto dal: Dec 2001 Città: Cernobbio -Co- 
					Messaggi: 47
				 | Quote: 
 Quote: 
 
				__________________ micheledellatorre.net | ||
|   |   | 
|  19-10-2011, 16:41 | #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) | ||
|   |   | 
|  19-10-2011, 17:00 | #18 | |
| Senior Member Iscritto dal: Oct 2001 
					Messaggi: 11471
				 | Quote: 
  Chiedo venia. | |
|   |   | 
|  19-10-2011, 17:55 | #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    | 
|   |   | 
|  19-10-2011, 17:57 | #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: 18:48.









 
		 
		 
		 
		




 
		






 
  
 



 
                        
                        










