Chcę zasymulować komunikację z serwerem. Jako zdalny serwer będzie miał pewne opóźnienia chcę używać wątek tła, który ma na toNSThread sleepfortimeinterval blokuje główny wątek
[NSThread sleepForTimeInterval:timeoutTillAnswer];
Nić jest tworzony z NSThread pogrupowanie i zaczął ... Jednak zauważyłem, że sleepForTimeInterval blokuje główny wątek. .. Czemu??? Czy domyślnie NSThread nie jest backgroundThread?
ten sposób tworzony jest wątek:
self.botThread = [[PSBotThread alloc] init];
[self.botThread start];
Dalsze informacje: Jest to bot subclas gwint
- (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];
}
chcę zadzwonić "messageForBot" z głównego wątku ... również wątek tła powinien wywoływać metodę na głównym wątku, aby się komunikować. Snu na czas domaga się wewnątrz obiektu gManager ....
Pokaż jak jesteś tworzenia wątku , co robi i kiedy wywołujemy 'sleepForTimeInterval:' (co opóźnia bieżący wątek o czas, w którym się go nazywa). – Wain
W ten sposób tworzę wątek ... [self.botThread start]; ... To wywołuje główną metodę klasy PSBotThread podklasy NSThread. – user1028028
Ale co to robi? Gdzie znajduje się 'sleepForTimeInterval'? – Wain