1

特定の時間がいつ超過したかを知るために、経過時間を測定する必要があります。

Ticks()これにはandを使用してMicroseconds()いましたが、両方の関数は非推奨になりました。

CFAbsoluteTimeGetCurrentドキュメントで説明されているように、逆方向に実行される可能性があるため、正しい使用方法ではありません。

この関数を繰り返し呼び出しても、単調に増加する結果は保証されません。システム時刻は、外部時刻参照との同期、またはユーザーによる明示的な時計の変更により、減少する場合があります。

非推奨ではなく、かなり将来性のあるもので他に何がありますか?

4

2 に答える 2

2

Q&A 1398で説明されている 1 つの方法は、mach_absolute_time次のように使用することです。

    static mach_timebase_info_data_t sTimebaseInfo;
    mach_timebase_info(&sTimebaseInfo); // Determines the time scale

    uint64_t t1 = mach_absolute_time();
    ...
    uint64_t t2 = mach_absolute_time();
    uint64_t elapsedNano = (t2-t1) * sTimebaseInfo.numer / sTimebaseInfo.denom;

ただし、これも絶対確実ではないかもしれません。この回答で指摘されているように、場合によっては値がオーバーフローする可能性があります。

于 2015-05-12T19:25:22.687 に答える