2009-12-12 17 views
8

バックグラウンドと同じように、私はCocoaでアプリケーションを構築しています。このアプリケーションはもともとC++で別の環境に存在していました。私はObjective-Cで可能な限りやりたいと思います。ココアでのミリ秒の時間間隔の決定

私の質問は以下のとおりです。

1) はどのように私は、整数として、今、私は今のように思い出し前回のミリ秒数を計算していますか?

2) TIME.H含むObjective-Cのプログラムで使用する場合、

クロックの単位は(何)

はあなたの助けをいただき、ありがとうございます。

答えて

14

CFAbsoluteTimeGetCurrent()を使用できますが、クロックは2回の呼び出しの間で変更される可能性があります。それを防ぐには、CACurrentMediaTime()を使用する必要があります。

これらの返品タイプは、それぞれデフォルトでdoubleCFAbsoluteTimeCFTimeIntervalです。したがって、秒数はdoubleの精度で返されます。 本当にの場合は、mach_absolute_time()を使用して#include <mach/mach_time.h>にある64ビット整数を返します。これには単位変換のビットが必要なので、コード例としてthis linkをチェックしてください。これはCACurrentMediaTime()が内部で使用するものなので、おそらくそれにこだわるのが最善です。

2つの呼び出しの違いを計算することは、明らかに単なる減算です。変数を使用して、最後の値を記憶してください。

clockの機能については、こちらのドキュメントを参照してください。clock()。基本的には、戻り値をCLOCKS_PER_SECで除算して実際の時刻を取得する必要があります。

+0

'clock'のための非C++固有のdocリンク:http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man3/clock.3.html –

6

私は現在と今まで覚えていた以前の時刻との間のミリ秒数を整数でどのように計算するのですか?

ミリ秒の整数として必要な理由はありますか?別の日付以降の時間間隔についてNSDateに問い合わせると、浮動小数点数秒が与えられます。ミリ秒が本当に必要な場合は、それを1000倍して浮動小数点数のミリ秒を得ることができます。実際に整数が必要な場合は、浮動小数点値を丸めたり切り捨てたりすることができます。

あなたは、開始から終了までの整数でそれを行う絶対単位で現在の時刻を取得するためにUpTimeまたはmach_absolute_timeのいずれかを使用し、実世界のユニットにそれを変換するためにAbsoluteToNanosecondsを使用したい場合。明らかに、ミリ秒単位で100万分の1を割る必要があります。

QA1398

mach_absolute_timeを示唆し、それは同じタイプAbsoluteToNanoseconds用途(テクニカルに示されるようにNO「ポインタ楽しい」)を返すためUpTimeは、容易です。

AbsoluteToNanosecondsは、構造体であるUnsignedWideを返します。 (これは、Macマシンがスカラーの64ビット値を処理する前のものです)。UnsignedWideToUInt64関数を使用してスカラーに変換します。それはちょうどあなたが通常のやり方をする減算を残します。

関連する問題