Foros del Web » Programación para mayores de 30 ;) » Java »

Pequeña ayuda con algoritmo de sincronización de relojes (receive, send)

Estas en el tema de Pequeña ayuda con algoritmo de sincronización de relojes (receive, send) en el foro de Java en Foros del Web. Hola que tal, tengo la siguiente duda: cómo logro que un contador que tengo, siga "corriendo" o que no se detenga por un receive, pero ...
  #1 (permalink)  
Antiguo 16/05/2010, 09:56
Avatar de cotopaxi  
Fecha de Ingreso: noviembre-2009
Ubicación: Guadalajara, Jalisco
Mensajes: 20
Antigüedad: 14 años, 5 meses
Puntos: 1
Pequeña ayuda con algoritmo de sincronización de relojes (receive, send)

Hola que tal, tengo la siguiente duda: cómo logro que un contador que tengo, siga "corriendo" o que no se detenga por un receive, pero tal receive debe estar al pendiente por si el servidor (servidor activo, puesto que envía datos a todos sus clientes, pues estoy haciendo el algoritmo de berkeley de sincronización de relojes) le envía un dato que, en este caso, es el tiempo que actual que tiene el cronómetro.
Código:
public class Client extends Thread
{	
	private boolean vivo;
	private ClientGUI clienteGUI;
	int puerto = 3000;
        byte[] buffer = new byte[10];
        DatagramPacket dato = new DatagramPacket(buffer, buffer.length);// Un DatagramPacket para recibir los mensajes.
	//
	private int h_p;
	private long tiempoinicial;

	private float d2p;
	private int tiempointerrupcion;
	private int n;
	private int tipo;
	public Client(ClientGUI cliente, MicroKernel nucleo, int id,long tiempoinicial,int h,int d,float p,int tipoReloj)
	{
		this.clienteGUI = cliente;
		this.nucleo = nucleo;
		this.id = id;
		this.tipo=tipoReloj;
		
		vivo = true;
			if(tipoReloj==1){
    		h_p=h;
    	}
    	else if(tipoReloj ==2){
    		h_p=h-(int)(h*p);
    	}
    	else if (tipoReloj == 3){
    		h_p=h+(int)(h*p);
    	}
    	n=1000/h;
    	d2p=d/(2*p);
    	this.tiempoinicial=tiempoinicial;
    	tiempointerrupcion = 1000/h_p;
        
	start();
	}
	public void stopThread()
	{
		vivo = false;
	}
	 public void setInicio(int hi) {
        tiempoinicial = hi;
    }

         public synchronized void receive()
	{
             try{

    		InetAddress direccion = InetAddress.getLocalHost();// direccion ip del interfaz de red
                DatagramSocket socket = new DatagramSocket(puerto, direccion); // Se recibe un dato y se escribe en pantalla.
                socket.setBroadcast(true);
                socket.receive(dato);
                socket.disconnect();
                clienteGUI.printMessage("Recibido dato de "+ dato.getAddress().getHostName() + " : ");
                // Conversion de los bytes a String
                String msg = new String(dato.getData());
                clienteGUI.printMessage(msg);

                socket.close();
    		}catch (Exception e) {e.printStackTrace();}
         }

	public void run()
	{
	while(vivo){
    		try{
    		
    		sleep(tiempointerrupcion);
    		tiempoinicial += n;
                clienteGUI.tiempoActual(String.valueOf(tiempoinicial));
                receive();
    		}catch (InterruptedException e ){e.getMessage();}
                 catch (Exception e) {e.printStackTrace();}
    		}
    		
    		
    	}
	}
Este código actual lo que hace es cada incremento sucede por cada receive que se recibe, lo que quiero es que el contador siga de corrido, es decir, los incrementos no se detengan por el receive, pero el receive esté al pendiente y despliegue el mensaje recibido. Espero haberme explicado, saludos
  #2 (permalink)  
Antiguo 25/11/2011, 05:26
 
Fecha de Ingreso: noviembre-2011
Mensajes: 1
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: Pequeña ayuda con algoritmo de sincronización de relojes (receive, send)

Tu codigo me parece interesante, solo te pediria que publiques los
otros codigos (ClientGUI, microKernel), ya que seria de mucha ayuda.

Etiquetas: pequeña, send, algoritmos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:21.