2012-02-26 14 views
1

私は、Win32 APIにはスリープメソッドがあり、関数呼び出しを遅らせるタイマークラスもあることがわかりました。OS Xでの関数呼び出しの遅延

Mac OSで使用できるものと似たものはありますか?

JavaScriptとAS3にあるsetTimeout関数を作成する簡単なソリューションが必要です。

+1

ターミナルを開いて 'apropos sleep'と入力しないと、-1になります。 – asveikau

答えて

2

CFTimerは、が実際にはであり、C++ &Cと互換性があります。

私が知ることは、それほどよく説明されていません。 Here is a related question that mentions it。より高いレベルで

sleep (I've linked the man page for you here)の標準C・コールが、またそこだとあなたは、機能のsetTimeout型としてこれを実行したい場合は、それが終了したときは、(その後、別のスレッドからsleepを行う方法を把握し、可能性があり殺されることなく)、物事は「タイムアウト」と考えてください。

0

これはNSTimerで行うことができます。

+0

これはC++ではありません – Pier

+0

ごめんなさい。あなたが正しい。 CFTimerがより良い選択になるでしょう。 – user1118321

0

C++コードをラップするC関数(またはブロック)を書くことができる場合は、Grand Central Dispatchを使用できます。

機能の遅延呼び出しの場合はdispatch_after_f、ブロックベースの同等の場合はdispatch_afterを参照してください。

3

あなたは2つの方法を使用してそれを行うことがあります。

1)このような使用NSObjectさんperformSelector:withObject:afterDelay:

2)を使用するグランドセントラル派遣、:

dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, interval * NSEC_PER_SEC); 
dispatch_after(delay, dispatch_get_main_queue(), ^{ 
    your code here 
}); 

あるいは、短い構文については、プロジェクトのどこかに次の関数を追加することができます:

void Dispatch_AfterDelay(dispatch_queue_t queue, NSTimeInterval afterInterval, dispatch_block_t block) 
{ 
    dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, afterInterval * NSEC_PER_SEC); 
    dispatch_after(delay, queue, block); 
} 

void Dispatch_AfterDelay_ToMainThread(NSTimeInterval afterInterval, dispatch_block_t block) 
{ 
    Dispatch_AfterDelay(dispatch_get_main_queue(), afterInterval, block); 
} 

そしてあなただけの呼び出し:

Dispatch_AfterDelay_ToMainThread(5.0, ^{ 
    your code 
}); 
+0

NSTimeInterval?それはCocoaの一部です...私はC++が必要です。 – Pier

0

あなたはUnixのを見ることができますがsleep()poll()のように呼び出します。

関連する問題