Como definir uma variável que represente um tempo no futuro em termos absolutos?

Motivação: Estou trabalhando em um aplicativo que faz com que vários telefones (clientes) leiam dados de áudio de um telefone (servidor). A ideia é que eles devemtodos tocar a música noexato mesmo tempo juntos.

Premissa: Eu preciso descobrir uma maneira de fazer com que todos os telefones iniciem em um determinado horário que seja absoluto (ou seja, não é relativo ao uso do relógio do telefone, etc.).pesquisa Eu percebi que a melhor maneira de fazer isso é usarCFAbsoluteTimeGetCurrent(); A idéia aqui é que eu recebo a latência necessária para o servidor se comunicar com cada telefone (b / c GKSession é feito em série aparentemente não paralelamente), adicionar essa latência à hora atual, e então fazer com que cada telefone toque a música a partir de essa hora de início. Esse horário de iníciodevo seja absoluto, não pode ser relativo.

Questão: Como posso representar um tempo no futuro em um número, que pode ser usado mais tarde para construir umCFDateRef. (A razão que tem que ser expressa como um número é que eu devo ser capaz de enviá-lo em um pacote ..)

Exemplo: Isso é um pouco de código que explica o que estou tentando alcançar:

-(void)viewDidLoad
{
    _timer = [Timer new];
    [_timer setCurrentTimeAsReferencepoint];

    [self performSelector:@selector(performAction) withObject:NULL afterDelay:5];

}


-(void)performAction
{
    double diff = [_timer getTimeElapsedinAbsTime];
    double timeInFuture = diff + [Timer getCurTime];
    NSLog(@"this is time in future in abs terms %f",timeInFuture);

    CFDateRef futureDate = CFDateCreate(NULL, timeInFuture);
    CFDateRef dateNow = CFDateCreate(NULL, [Timer getCurTime]);

    Boolean keepTesting = true;

    while (keepTesting) {
        if (CFDateCompare(dateNow, futureDate,NULL) == 0)   // ie both times are equal
        {
            NSLog(@"now is the time!");
            keepTesting = false;
        } else {
            NSLog(@"now isn't the time.. skip");
        }
    }
}

em Timer.m:

-(void)setCurrentTimeAsReferencepoint
{
    _referencePoint = [[self class] getCurTime];
    NSLog(@"this is reference point %f",_referencePoint);  
}

+(double)getCurTime
{
    return (double)CFAbsoluteTimeGetCurrent();
}

// not used in the above code.. but used when i compare the time of the server phone with the client phone
+(double)getTimeDifference:(double)time1
                     time2:(double)time2
{    
    CFDateRef newDate = CFDateCreate(NULL, time2);
    CFDateRef oldDate = CFDateCreate(NULL, time1);

    CFTimeInterval difference = CFDateGetTimeIntervalSinceDate(newDate, oldDate);    

    NSLog(@"this is time difference %f",fabs(difference));
    CFRelease(oldDate); CFRelease(newDate); 

    // fabs = absolute value
    return fabs(difference);    
}

questionAnswers(1)

yourAnswerToTheQuestion