2013-02-23 15 views
5

私はこの質問が以前に尋ねられたと確信していましたので、検索機能を使用して問題が解決したかどうかを確認しました。ObjC/C/C++コールバック付き高解像度タイマー

しかし、で多くの回答が見つかりました。高精度で時間を測定しました。

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

私はこれを見つけましたが、ビジーな待機戦略を使用しています。

お願いします。

+3

CまたはC++?一つを選ぶ。 –

+0

私はCocoaについてはわかりませんが、イベントループのメカニズムについて詳しくは、それは確かにいくつかのタイマーやポーリングを与える....あなたは基本的にタイムアウトイベントコールバックを登録する方法を見つける必要があります。 –

+0

この質問はあなたの答えを持っているようだ:http://stackoverflow.com/questions/464618/whats-the-equivalent-of-windows-queryperformancecounter-on-osx(2番目の答え:OSXのmach_absolute_timeとmach_timebase_infoは、 Win32 QueryPerformance *関数)。 –

答えて

6

あなたが使用できる素晴らしい技術の1つは、Appleから直接提供されます。タイマーディスパッチソース:

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

それはそれを読むためにしばらく時間がかかるだろうが、あなたはそれを得れば、それは非常に使いやすいです。時間間隔をナノ秒単位で指定し、定期的に実行するブロックを指定することができます。

これはGCDテクノロジの一部であり、Cベースです。 Objective-CはちょうどCに加えていくつかの追加であるため、Cに固執するのが自然であるようです.C++に進むと、Objective-C++はこの場合には過剰なようです。

+0

これは素晴らしいですね! GCDでもそれができるのか分からなかった!答えをありがとう! – guitarflow

+0

これは、正確なココアタイマー検索のために検索結果を上げる必要があります。これは最高です。 – uchuugaka

6

AppleからGCDを直接使用することができます。 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 
}); 
+0

完璧!ありがとう。それを調べます。 – guitarflow

関連する問題