1
iOSシミュレータのNanosleep(MacOS SierraでXCode 8.1と8.2betaで動作)は、希望の持続時間より5倍長くスリープします。iOSシミュレータでnanosleepが長すぎるSierra
実際のiPhone 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 guranteesをシステムコール
Sleep = 84.451425 msec Sleep = 69.947846 msec Sleep = 95.484521 msec Sleep = 72.795438 msec Sleep = 80.162972 msec Sleep = 70.265713 msec ...
ジェレミーと@ルスビショップ、ありがとう! :D私も優先課題を予期していました! – Kris
@Kris Xcode 8.3 Betaをチェックして問題が解決したかどうかを報告してください。そうでない場合は、 'sudo taskinfo'の出力で更新してください。 –
Xcode 8.3 betaで修正されました!ありがとう!!実際には、Xcode 8.2シミュレータの回避策を使用しました。>複数の小さなスリープと時間チェックを伴うループ。 – Kris