2009-09-23 4 views
9

私は自分のアプリケーションで次のように実装しました。スリープ機能の代替品

for(i=0;!stopThroughButtons && i<totalMovements;i++){ 
     [NSThread detachNewThreadSelector:@selector(moveNeedle) toTarget:self withObject:nil]; 
     sleep(0.3); 
    } 

ここsleepunsigned int型の引数を持つ関数です。

睡眠法は睡眠に秒を使います。

タイミングをミリ秒単位で指定してスリープ状態にします。

どの代替品が利用可能ですか?

+0

sleep()は間違った答えです。下記参照。 – bbum

+0

今は私のロジックから睡眠を取り除いたので、私はスリープとスレッドの代わりにタイマーを使いました。 Ok @bbum。あなたのコメントは私にその点に注意を喚起した。 –

答えて

33

つのオプション:
int usleep(useconds_t useconds) は小数秒の時間を要しNSThreadの+ sleepForTimeIntervalは:,もありますナノ秒

+0

優れたもの。素晴らしい知識。 –

+0

私はこれを最後に実装しました。 & できます。用 (!; stopThroughButtonsは&& iは0 = 9) \t \t \t \tブレーク。 \t \t \t [NSThread detachNewThreadSelector:@selector(moveNeedle)toTarget:self withObject:nil]; \t \t \t usleep(200000); \t \t} –

+3

以下のcdespinosaの回答をご覧ください。 sleep()を使用することは、ほとんど常に間違った答えです。 – bbum

3

代わりに、ナノ秒かかる代わりにnanosleep()が必要です。これらの睡眠時間は正確ではないことに注意してください。実際には数百分の1秒よりも正確に睡眠時間を指定する能力があります。

+0

ナノスリープ(<#const struct timespec *#>、<#struct timespec *#>) 先生、引数として渡すべきことを教えてください。 –

33

を使用するマイクロ
int nanosleep(const struct timespec *rqtp, struct timespec *rmtp)を使用します。例:

[NSThread sleepForTimeInterval:0.05]; 

は50ミリ秒間スリープする必要があります。

+0

ありがとうございます。これはメインスレッドを50ミリ秒間保持します。 :) –

16

開始した他のスレッドで説明したように、イベント配信をブロックしてUIをフリーズするので、メインスレッドでスリープ状態にしたくない可能性があります。ループやスリープの代わりに、タイマーを起動し、タイマーが起動したときにアクションを実行したいと思うかもしれません。

+1

+1、睡眠はほとんどいつも間違ったことです –

+0

大丈夫です。今は私のロジックから睡眠を取り除いたので、私はスリープとスレッドの代わりにタイマーを使いました。 Ok @bbum。あなたのコメントは私にその点に注意を喚起した。 –

+0

UIテストでは、テストアプリケーションがテスト済みのアプリケーションとは異なるプロセスで実行されているため、スリープメソッドが役立ちます。 – user3426913