サーバとの通信をシミュレートしたい。リモートサーバが、私はそれNSThread sleepfortimeintervalブロックメインスレッド
[NSThread sleepForTimeInterval:timeoutTillAnswer];
スレッドNSThreadサブクラス分けを使用して作成して開始された上で持っているバックグラウンドスレッドを使用するいくつかの遅延を持つことになりますよう...しかし、私はsleepForTimeIntervalは、メインスレッドをブロックしていることに気づきました。 .. なぜ??? NSThreadはデフォルトでbackgroundThreadですか?
これは、スレッドが作成される方法です。
self.botThread = [[PSBotThread alloc] init];
[self.botThread start];
さらに詳細: これはボットスレッドsubclasある
- (void)main
{
@autoreleasepool {
self.gManager = [[PSGameManager alloc] init];
self.comManager = [[PSComManager alloc] init];
self.bot = [[PSBotPlayer alloc] initWithName:@"Botus" andXP:[NSNumber numberWithInteger:1500]];
self.gManager.localPlayer = self.bot;
self.gManager.comDelegate = self.comManager;
self.gManager.tillTheEndGame = NO;
self.gManager.localDelegate = self.bot;
self.comManager.gameManDelegate = self.gManager;
self.comManager.isBackgroundThread = YES;
self.comManager.logginEnabled = NO;
self.gManager.logginEnabled = NO;
self.bot.gameDelegate = self.gManager;
BOOL isAlive = YES;
// set up a run loop
NSRunLoop *runloop = [NSRunLoop currentRunLoop];
[runloop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];
[self.gManager beginGameSP];
while (isAlive) { // 'isAlive' is a variable that is used to control the thread existence...
[runloop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
}
}
- (void)messageForBot:(NSData *)msg
{
[self.comManager didReceiveMessage:msg];
}
私はメインスレッドから "messageForBot" を呼びたいです...また、バックグラウンドスレッドは、メインスレッド上のメソッドを呼び出して通信する必要があります。時間のスリープは、gManagerオブジェクトの内部で行われます....
ショー、それは何をし、 'sleepForTimeInterval:'(これは現在のスレッドを遅らせますそれが呼ばれた時)。 – Wain
これは私がスレッドを作成する方法です... [self.botThread start]; ...それは、NSThreadサブクラスPSBotThreadメインメソッドを呼び出します。 – user1028028
しかしそれは何をしますか? 'sleepForTimeInterval'はどこにありますか? – Wain