Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(iphone)如何在此处正确设置runloop?许多问题_Iphone_Multithreading_Runloop - Fatal编程技术网

(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** 
      }
    }