2012-05-14 7 views
2

問題文:すべてのバックエンド処理を行う1つのセカンダリスレッドがあります。このセカンダリスレッドでは、実行する別のNSRunLoopを作成しました。我々は作成してNSRunLoopが長い遅延の後にセレクタを呼び出す

NSAutoreleasePool *myPool = [[NSAutoreleasePool alloc] init]; 
NSRunLoop * threadRL = [NSRunLoop currentRunLoop]; 
[threadRL addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode]; 
[threadRL run]; 
[myPool release]; 

すべてのものを実行するために、ほぼ10秒を取っているセレクタへの呼び出しの1を除いて正常に動作され、この実行ループでタイマーを使用し、これは毎回ランダムに起こりません。

[myclass performSelector:@selector(func) onThread:myThread withObject:nil waitUntilDone:NO]; 

私もこれを差し替えませんでした。私はおそらく、このくらいの時間がかかることがありFUNCで任意のタスクを致しておりません

[myclass performSelector:@selector(func) onThread:myThread withObject:nil waitUntilDone:NO modes:[NSArray arrayWithObjects: NSDefaultRunLoopMode, NSRunLoopCommonModes,nil]]; 

は、

私は何を考えていると、別のモードで実行ループである可能性があるかもしれないということです。

ファンドを最高優先順位で実行する方法、つまり実行中に実行されているものが中断されるなどの方法がありますか?

答えて

0

NSTimerを作成し、今度はfiredateを設定することができます。以下のサンプルコードをご覧ください。

NSTimer *timer = [[NSTimer alloc] initWithFireDate:now 
                interval:.01 
                target:myClass 
                selector:@selector(funct) 
                userInfo:nil 
                repeats:NO]; 

    NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; 
     [runLoop addTimer:timer forMode:NSDefaultRunLoopMode]; 
     [runLoop run]; 
+0

このランロップにはタイマーが付いています。スレッド上の他の多くのperformselectorが動作していますが、このfuncでは長い遅延が必要です。その理由は、実行ループが何かを処理している可能性がありますが、私の要件はfunc ASAPを非常に高い優先順位で処理することです。 –

0

私は自分の質問に答えています。私のrunloopはNSInputStreamで待機していました:読み込むバイトがないときに読み込みます。したがって、funcはrunloopソースにキューイングされていましたが、スレッドがソケット読み取りで待機している間に何も実行されませんでした。

私がランループを引っ掛けて、そこにくっついているのを見たとき、私はこれを知っていました。

関連する問題