2016-12-02 4 views
1

iOS 시뮬레이터의 Nanosleep (MacOS Sierra에서 XCode 8.1 및 8.2beta로 실행)은 원하는 지속 시간보다 약 5 배 더 자게된다.MacOS에서 iOS 시뮬레이터에서 Nanosleep이 너무 길다. Sierra

실제 아이폰 7 기기 나 macOS Sierra 앱에서는 시뮬레이터에서만 발생합니다.

시뮬레이터에서 더 정확한 수면 지속 시간을 가질 수 있습니까, 아니면 버그입니까?

struct timespec request; 
request.tv_sec = 0; 
request.tv_nsec = 17000000; // 17ms 

mach_timebase_info_data_t base; 
mach_timebase_info(&base); 

while (1) { 
    uint64_t start, end, elapsed; 
    start = mach_absolute_time(); 

    nanosleep(&request, NULL); 

    end = mach_absolute_time(); 
    elapsed = (end - start)/base.denom; 

    printf("Sleep = %f msec\n", elapsed * 1E-6); 
} 

출력 : 당신이 요청 된 기간 후 어느 시점에 예약 할 수 있습니다 ONY 보증 등을 콜

 

    Sleep = 84.451425 msec 
    Sleep = 69.947846 msec 
    Sleep = 95.484521 msec 
    Sleep = 72.795438 msec 
    Sleep = 80.162972 msec 
    Sleep = 70.265713 msec 
    ... 

답변

1

. 당신은 얼마나 빨리 후에 어떤 가정을해서는 안됩니다.

Sierra에서 실행되는 Xcode 8.0-8.2에는 시뮬레이터 프로세스가 의도 한 것보다 낮은 우선 순위로 예약되도록하는 문제가 있습니다. 이것이 기기와 시뮬레이션 간의 이러한 차이를 확인한 이유 일 수 있습니다.

+1

Jeremy 및 @russbishop, 감사합니다. : D 나는 또한 우선 순위 문제를 예상했다! – Kris

+0

@Kris Xcode 8.3 Beta를 확인하고 문제가 해결되었는지보고하십시오. 그렇지 않다면,'sudo taskinfo '의 출력으로 업데이트하십시오. –

+0

Xcode 8.3 beta에서 수정되었습니다! 감사!! 실제로 우리는 Xcode 8.2 시뮬레이터에 대한 해결 방법을 사용했습니다.> 여러 개의 작은 잠자기 및 시간 확인이있는 루프. – Kris

관련 문제