我想模拟与服务器的通信.由于远程服务器会有一些延迟,我想使用它上面的后台线程
[NSThread sleepForTimeInterval:timeoutTillAnswer];
Run Code Online (Sandbox Code Playgroud)
该线程是使用NSThread子类创建的并且已经启动...但是我注意到sleepForTimeInterval阻塞了主线程...为什么??? 默认情况下,NSThread不是backgroundThread吗?
这是线程的创建方式:
self.botThread = [[PSBotThread alloc] init];
[self.botThread start];
Run Code Online (Sandbox Code Playgroud)
更多信息:这是bot线程子类
- (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];
}
Run Code Online (Sandbox Code Playgroud)
我想从主线程中调用"messageForBot"...后台线程也应该调用主线程上的方法进行通信..睡眠时间在gManager对象内部进行干扰....
Joh*_*ohn 23
它阻止运行sleepForTimeInterval的任何线程.在另一个线程上运行它来模拟您的服务器延迟,如下所示:
dispatch_queue_t serverDelaySimulationThread = dispatch_queue_create("com.xxx.serverDelay", nil);
dispatch_async(serverDelaySimulationThread, ^{
[NSThread sleepForTimeInterval:10.0];
dispatch_async(dispatch_get_main_queue(), ^{
//Your server communication code here
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25791 次 |
| 最近记录: |