Как установить переменную, которая представляет время в будущем в абсолютных показателях Цель C

Motivation: Я работаю над приложением, которое заставляет несколько (клиентских) телефонов считывать аудиоданные с (серверного) телефона. Идея в том, что они должныall сыграть песню наexact в то же время вместе.

Premise: Я должен найти способ заставить все телефоны запускаться с определенной отметкой времени, которая является абсолютной (то есть она не относится к установленным часам использования любого телефона и т. Д.) .. на основе некоторыхисследование Я решил, что лучший способ сделать это - использоватьCFAbsoluteTimeGetCurrent(); Идея заключается в том, что я получаю задержку, необходимую серверу для связи с каждым телефоном (очевидно, что сеанс GKSession выполняется последовательно, а не параллельно), добавляю эту задержку к текущему времени и затем каждый телефон воспроизводит песню, начиная с это время начала. Это время началаmust быть абсолютным, оно не может быть относительным.

Question: Как я могу изобразить время в будущем в числе, которое впоследствии можно будет использовать для построенияCFDateRef, (Причина, по которой он должен быть выражен в виде числа, заключается в том, что я должен иметь возможность отправить его в пакете ...)

Example: Это небольшой фрагмент кода, который объясняет, чего я пытаюсь достичь:

-(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");
        }
    }
}

в 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);    
}

Ответы на вопрос(1)

Ваш ответ на вопрос