5

この質問は以前に聞いたことがあると確信していたので、もちろん検索機能を使用して、問題を解決する答えがあるかどうかを確認しました。

しかし、私が見つけたのは、時間を高精度で測定することについての多くの答えだけでした。

必要なのは、定義された期間が経過したときにコールバックを起動できる高解像度(少なくともミリ秒)のタイマーです。これをCocoaMacOS Xアプリで使用したいので、C /C++またはObj-Cが可能です。追加のライブラリが必要な場合は、これも問題ありません。

このhttp://www.songho.ca/misc/timer/timer.htmlを見つけましたが、ビジーウェイト戦略を使用しており、パフォーマンスが高すぎると思います。

ヘルプは大歓迎です!

4

3 に答える 3

7

使用できる優れたテクノロジーの1つは、Appleから直接提供されたものです。タイマーディスパッチソース:

http://developer.apple.com/library/mac/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/GCDWorkQueues/GCDWorkQueues.html

読むのに少し時間がかかりますが、一度手に入れればとても使いやすいです。時間間隔をナノ秒単位で指定し、定期的に実行する必要があるブロックを指定できます。

これはGCDテクノロジーの一部であり、Cベースです。Objective-CはCにいくつかの追加を加えたものであるため、Cに固執する方が自然なようです。C++に入ると、この場合、Objective-C++はやり過ぎのように見えます。

于 2013-02-23T12:14:57.867 に答える
7

GCDはAppleから直接使用できます。Mac OS Xでは、GCDはv10.7以降で使用できます。

double delayInMilliseconds = 100.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInMilliseconds * NSEC_PER_MSEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    // callback invocation
});
于 2013-02-23T13:03:04.527 に答える
1

ブーストタイマーを使用できるかもしれませんが、

http://www.boost.org/doc/libs/1_40_0/doc/html/boost_asio/tutorial/tuttimer2.html、チュートリアルでは秒の例を示していますが、ミリ秒を使用することもできます。つまり、以下を使用します。

boost :: posix_time :: milliseconds(...)

于 2013-02-23T12:19:59.997 に答える