public void run() {
		while (continueRunning) {     
//			System.out.println("[PacketCacheThread] run "+ TimeUtilities.dateStampSimplerPrecise());
			
			speedometer.pruneToFrame();
			
			//each 10 millisecs... dispatch the cache, but don't go over volume limit			
			while(	(cacheForClient.size() > 0) && (!isOverLimit())) {
				Core.dispatch(cacheForClient.remove(0)); //shift
				packetsPerSecDispatched++;
			}
			
			//each second
			if(milliseconds >= MILLISECS_PER_SEC) {

//				Log.debug(	"[PacketCacheThread] uptime=" + seconds + " secs, " +
//						LibUtilities.formatFloat(stats.packetsPerSecTotal) + " packets/sec " + 
//						"(" + LibUtilities.formatFloat(stats.packetsPerSecTCP) + " TCP, "+ 
//						LibUtilities.formatFloat(stats.packetsPerSecUDP) +" UDP). Number dispatched to client: "+packetsPerSecDispatched);
//				
//				Log.debug("\n================================");
				seconds++;
				reset();		
			}
			
			try {
				milliseconds += MILLISECS_PER_THREAD_LOOP;
				Thread.sleep(MILLISECS_PER_THREAD_LOOP);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}