Ich möchte eine Kommunikation mit einem Server simulieren. Da der Remote-Server einige Verzögerungen haben Ich möchte einen Hintergrund-Thread verwenden, die auf esNSThread sleepfortimeiinterval Blöcke Hauptthread
[NSThread sleepForTimeInterval:timeoutTillAnswer];
Das Gewinde mit NSThread Unter classing hat erstellt und gestartet ... Allerdings bemerkte ich, dass sleepForTimeInterval den Haupt-Thread blockiert. .. Warum??? Ist ein NSThread standardmäßig kein backgroundThread?
Dies ist, wie der Thread erstellt wird:
self.botThread = [[PSBotThread alloc] init];
[self.botThread start];
Weitere Informationen: Dies ist der Bot Thread 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];
}
Ich möchte von der Haupt-Thread "messageForBot" nennen ... auch der Hintergrundthread sollte eine Methode auf dem Hauptthread aufrufen, um zu kommunizieren. Der Schlaf für Zeit intervalil innerhalb des gManager-Objekts ....
Zeigen Sie, wie Sie den Faden sind die Schaffung , was es tut und wann Sie 'sleepForTimeInterval:' aufrufen (wodurch der aktuelle Thread um die Zeit es heißt). – Wain
So erstelle ich den Thread ... [self.botThread start]; ... Das ruft die Hauptmethode für die NSThread-Unterklasse PSBotThread auf. – user1028028
Aber was macht es? Wo ist der 'sleepForTimeInterval'? – Wain