Jak ustawić zmienną reprezentującą czas w przyszłości w kategoriach bezwzględnych cel C

Motywacja: Pracuję nad aplikacją, która sprawia, że ​​kilka telefonów (klientów) odczytuje dane audio z telefonu (serwera). Chodzi o to, że musząwszystko zagraj piosenkę wdokładny ten sam czas razem.

Przesłanka: Muszę wymyślić sposób, aby wszystkie telefony zaczęły się od pewnego znacznika czasu, który jest absolutny (tzn. Nie jest zależny od zegara ustawionego przez telefon itp.) .. na podstawie niektórychBadania Pomyślałem, że najlepszym sposobem na to jest użycieCFAbsoluteTimeGetCurrent(); Chodzi o to, że dostaję opóźnienie, z jakim serwer komunikuje się z każdym telefonem (b / c GKSession odbywa się szeregowo, nie pozornie równolegle), dodaj opóźnienie do bieżącego czasu, a następnie niech każdy telefon odtworzy piosenkę od ten czas rozpoczęcia. Ten czas rozpoczęciamusi być absolutnym, nie może być względny.

Pytanie: Jak mogę przedstawić czas w przyszłości w liczbie, która może być później użyta do skonstruowaniaCFDateRef. (Powodem, dla którego musi być wyrażony jako liczba, jest to, że muszę być w stanie wysłać go w pakiecie ..)

Przykład: To jest trochę kodu, który wyjaśnia, co próbuję osiągnąć:

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

w 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