Синхронизированные часы для начала события - PullRequest
0 голосов
/ 20 января 2019

Я изучал, как синхронизировать систему часов. Я не уверен, правильно ли я понял. Для того, чтобы легко разоблачить мою проблему, я пишу код. Допустим, я хотел бы напечатать в консоли «Нечто», синхронизированное с несколькими компьютерами, которые связаны с моим компьютером через сокет-сервер. Моя идея такова:

код в моем компьютере:

public static void SendMessage()throws Exception{
    String TIME_SERVER = "time-a.nist.gov";
    boolean state = true;
    NTPUDPClient timeClient = new NTPUDPClient();
    InetAddress inetAddress = InetAddress.getByName(TIME_SERVER);
    TimeInfo timeInfo = timeClient.getTime(inetAddress);
    timeInfo.computeDetails();
    long timeSpan = System.currentTimeMillis()+10000;//more 10s
    Date dateSpan = new Date(systemtime + timeInfo.getOffset());
    //then I send the dateSpan.getTime() via oscMessage for all computer
   while(state){
       long systemTime = System.currentTimeMillis();
       Date realdate = new Date(systemtime + timeInfo.getOffset());
       if(dateSpan.getTime()==realdate.getTime()) {
           System.out.println("Something");
           state = false;
       }
   }
}

// В клиентах компьютера код более или менее такой:

public receiveMessage(long dateSpan)throws Exception{
    String TIME_SERVER = "time-a.nist.gov";
    boolean state = true;
    NTPUDPClient timeClient = new NTPUDPClient();
    InetAddress inetAddress = InetAddress.getByName(TIME_SERVER);
    TimeInfo timeInfo = timeClient.getTime(inetAddress);
    timeInfo.computeDetails();
    while(state){
        long systemtime = System.currentTimeMillis();
        Date realdate = new Date(systemtime + timeInfo.getOffset());
        if(dateSpan.getTime()==realdate.getTime()) {
            System.out.println("Something");
            state = false;
        }

    }
}

Я опускаю некоторые части кода, связанные с тем, как я посылаю сообщение oscMessage. Я в основном использую библиотеку oscP5. Мой вопрос: Способ, которым я реализую этот код, гарантирует, что все компьютеры будут печатать "Что-то одновременно, независимо от их системных часов?" Есть лучшие предложения ?! Заранее благодарен

...