서버와의 통신을 시뮬레이트하고 싶습니다. 원격 서버가 일부 지연이있을 것이다로서 나는 그러나 내가 sleepForTimeInterval 메인 스레드를 차단하는 것으로 나타났습니다 ... 그것은NSThread sleepfortimeinterval 블록 메인 스레드
[NSThread sleepForTimeInterval:timeoutTillAnswer];
스레드가 NSThread의 서브 클래스라는으로 작성 및 시작에있는 백그라운드 스레드를 사용하고 싶습니다. .. 왜??? 기본적으로 NSThread는 backgroundThread가 아닌가?
이 스레드가 생성되는 방법입니다
self.botThread = [[PSBotThread alloc] init];
[self.botThread start];
추가 정보 : 이 로봇 스레드 subclas
내가 메인 스레드에서 "messageForBot"를 호출 할- (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];
}
입니다 ... 백그라운드 스레드는 메인 스레드의 메소드를 호출하여 통신해야합니다. 시간에 대한 수면은 gManager 객체 내부에서 상호 작용합니다 ....
쇼 , 무엇을하는지,'sleepForTimeInterval :'(현재 쓰래드를 지연시킨다. 그것이 호출 된 시간). – Wain
그것이 내가 쓰레드를 만드는 방법입니다 ... [self.botThread start]; ... 그것은 NSThread 서브 클래스 인 PSBotThread main 메서드를 호출합니다. – user1028028
하지만 어떻게됩니까? 'sleepForTimeInterval'은 어디입니까? – Wain