(iphone)如何在此处正确设置runloop?许多问题
我刚刚开始阅读苹果的线程编程指南。 我正在开始一个线程,并且有一个引用(iphone)如何在此处正确设置runloop?许多问题,iphone,multithreading,runloop,Iphone,Multithreading,Runloop,我刚刚开始阅读苹果的线程编程指南。 我正在开始一个线程,并且有一个引用 self.myThread = [[NSThread alloc] initWithTarget: self selector: @selector(myThreadMain) object: nil]; [self.myThread start]; threadM
self.myThread = [[NSThread alloc] initWithTarget: self
selector: @selector(myThreadMain)
object: nil];
[self.myThread start];
threadMain看起来像文档中的示例代码。
我需要将代码中的exitNow变量从主线程更改为终止此线程,但不知道如何终止。
myThreadMain循环在不执行任何工作时需要睡眠,但也不知道如何实现它。
文档说,如果新线程不会立即死亡,我将至少需要一个输入源,但是新线程只需要接收exit now消息和PerformSelect:onThread:call。
我应该设置输入源吗
我将在星期五之前把一些工作交给这个线程
performSelector:onThread:withObject:
要执行的选择器需要定义如下:,
但也不知道如何做到这一点
- (void) selectorToPerformInThread
{
for( int i = 0; i < 10; ++i )
{
do something;
**if(received a new "selectorToPerformInThread" call
when we are still in this loop)
break out and let the new "selectorToPerformInThread"
in order to run from the beginning of loop**
}
}
这是很多问题。。。
让我重申我的问题
如何设置存储在threadDict中的exitNow变量。
如何设置线程,使其在没有工作时休眠,而不执行选择器是必需的。
我应该设置一个输入源,这样线程就不会马上死掉吗?
如何设置运行循环,以便每次调用performSelector时,取消正在执行的同一个Selector,并从头开始运行它?
提前谢谢 1/通过引用传递exitNow变量并在threadDict中设置它,或者传递包含该变量的对象并设置obj.exitNow=YES 2/当线程完成其工作时,让它死去。你需要一个新的线程,只要开始一个新的 3/对不起,我不明白你的意思
4/我认为您需要一个单例obj,然后在该对象内设置变量,使线程退出,然后启动一个新线程并调用选择器1/或者通过引用传递exitNow变量并在threadDict中设置它,或者传递包含该变量的对象并设置obj.exitNow=YES 2/当线程完成其工作时,让它死去。你需要一个新的线程,只要开始一个新的 3/对不起,我不明白你的意思
4/我认为您需要一个单例obj,然后在该对象内设置变量,以便线程退出,然后启动一个新线程并调用选择器1。你是说threadDict是线程安全的吗?2.维护螺纹是要求3之一。找到一个答案,nsrunlop*runloop=[NSRunLoop currentlunloop];[runloop addPort:[NSMachPort端口]forMode:NSDefaultRunLoopMode];防止线程立即退出。4.此外,维护螺纹也是一项要求1。你是说threadDict是线程安全的吗?2.维护螺纹是要求3之一。找到一个答案,nsrunlop*runloop=[NSRunLoop currentlunloop];[runloop addPort:[NSMachPort端口]forMode:NSDefaultRunLoopMode];防止线程立即退出。4.此外,维护线程也是一项要求,那么您是否已经解决了这个问题?如果你能分享你的代码或指出一些有用的教程,那将是非常棒的。那么你已经想出了这个方法吗?如果你能分享你的代码或指出一些有用的教程,那就太好了
- (void) selectorToPerformInThread
{
for( int i = 0; i < 10; ++i )
{
do something;
**if(received a new "selectorToPerformInThread" call
when we are still in this loop)
break out and let the new "selectorToPerformInThread"
in order to run from the beginning of loop**
}
}