私はちょうどサンプルアプリケーションを使っていましたが、私の頭を完全にNSRunLoop
にラップさせようとしました。私が書いたサンプルはNSOperation
で簡単なセカンダリスレッドを作成しました。セカンダリスレッドは、NSTimer
の処理や、NSStream
の初歩的なストリーミングなどのいくつかのタスクを実行します。これらの入力ソースの両方は、実行するために適切に設定されたNSRunLoop
を必要とします。メインスレッドのNSRunLoopがセカンダリスレッドで参照されています
私の質問はこれです。イベントはプロセスだろう、上記のコードで、今
NSRunLoop* myRunLoop = [NSRunLoop currentRunLoop];
self.connectTimer = [NSTimer scheduledTimerWithTimeInterval:connectTimeout
target:self
selector:@selector(connectionConnectedCheck:)
userInfo:nil
repeats:NO];
[myRunLoop addTimer:self.connectTimer forMode:NSDefaultRunLoopMode]; // added source here
[myRunLoop run];
[NSStream getStreamsToHostNamed:relayHost port:relayPort inputStream:&inputStream outputStream:&outputStream];
if ((inputStream != nil) && (outputStream != nil))
{
sendState = kSKPSMTPConnecting;
isSecure = NO;
[inputStream retain];
[outputStream retain];
[inputStream setDelegate:self];
[outputStream setDelegate:self];
[inputStream scheduleInRunLoop: myRunLoop //[NSRunLoop currentRunLoop]
forMode:NSRunLoopCommonModes];
[outputStream scheduleInRunLoop: myRunLoop //[NSRunLoop currentRunLoop]
forMode:NSRunLoopCommonModes];
[inputStream open];
[outputStream open];
self.inputString = [NSMutableString string];
return YES;
}
:もともと私は、二次スレッドでこのように見えたいくつかのコードを持っていました。 currentRunLoop
にはありません。私は後で何かひどいことをしました。これは単なる教育練習だったので、NSRunLoop
mainRunLoop
で実行するように修正しました。魔法のように働いた。しかし、私の主なスレッドに応じて、セカンダリスレッドでループを実行すると、が異なる10種類のレベルにあることがほぼ間違っています。。
私の質問は2つの部分に分かれているので、これは問題ありません。
おそらく私が実行して、実行ループを経由してイベントに応答するセカンダリスレッドを取得するために適用ハック「少し」と間違って何をして行くことができますか?
私はステップに洞察力のための1
おかげですべてを行う必要はありませんので、すべてのイベント/タイマーベースのソースを聞くためにセカンダリスレッドを構成するための適切な方法は何でしょう。
私は確かにそれを試してみました。運がない。コードは[NSRunLoop mainRunLoop]で実行された場合にのみ実行されます –