[self request]; //main thread
- (void)request {
[self performSelectorInBackground:@selector(regFun) withObject:nil];
}
- (void)regFun {
CFRunLoopRun();
CCLOG(@"CFRunLoopRun not work");
}
鉴于以前的代码,你知道为什么CFRunLoopRun()
无效吗?我需要在后台调用regFun
。
还有其他方法可以阻止后台线程吗?
答案 0 :(得分:1)
它可以工作。
[self request]; //main thread
- (void)request {
//[self performSelectorInBackground:@selector(regFun) withObject:nil];
[NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(regFun) userInfo:nil repeats:NO];
}
- (void)regFun {
CFRunLoopRun();
CCLOG(@"CFRunLoopRun not work");
}
但我不确定这是正确的方法,我也不知道发生了什么。 :(
答案 1 :(得分:1)
好的,既然你没有告诉我们你真正需要做什么,那就让我猜吧。如果您只想在后台运行选择器,请尝试Grand Central Dispatch:
- (void) request {
dispatch_async(dispatch_get_global_queue(0, 0), ^{
[self regFun];
});
}
- (void) regFun {
// Running in background, with a run loop available
// and an autorelease pool, too. After the code finishes:
dispatch_async(dispatch_get_main_queue(), ^{
// Will be called on the main thread.
[self reportBackgroundTaskFinished];
});
}
答案 2 :(得分:0)
regFun
位于后台线程中,因此对CFRunLoopRun()
的调用会在此线程中创建并运行一个运行循环。只有运行循环没有任何附加信息,所以它会立即退出。