Я изучал, как синхронизировать систему часов. Я не уверен, правильно ли я понял. Для того, чтобы легко разоблачить мою проблему, я пишу код. Допустим, я хотел бы напечатать в консоли «Нечто», синхронизированное с несколькими компьютерами, которые связаны с моим компьютером через сокет-сервер. Моя идея такова:
код в моем компьютере:
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. Мой вопрос:
Способ, которым я реализую этот код, гарантирует, что все компьютеры будут печатать "Что-то одновременно, независимо от их системных часов?"
Есть лучшие предложения ?!
Заранее благодарен