使用iOS线程并等待功能完成

时间:2017-11-27 03:36:47

标签: ios objective-c multithreading

我在项目中的一个线程上调用一个函数。

 [self performSelectorInBackground:@selector(shortVibration) withObject: nil];

它被循环调用。

我想在自己的线程上调用该函数。

我不希望它同时被调用(如果这个线程调用处于循环中......它就是这样)

所以,我不想再次调用我的线程函数,直到最后一个执行完毕。

我该怎么做?

2 个答案:

答案 0 :(得分:0)

也许您应该看看NSOperationQueue,它允许您在自己创建的队列中调用函数。队列在自己的线程上执行。

例如:

NSOperationQueue *backgroundQueue = [[NSOperationQueue alloc]init];
backgroundQueue.maxConcurrentOperationCount = 1;
backgroundQueue.name = @"com.foo.bar";

[_backgroundQueue addOperationWithBlock:^{
       do what you want.... here you also have access to properties in your class.
}];

使用operationCount可以处理并行执行的操作数。您还可以创建自己的NSOperation子类并在那里执行代码。然后你必须添加像这样的操作[_backgroundQueue addOperation:SubclassOfNSOperation]。

我希望这对你有所帮助。在您的问题中,我无法获得更多信息来帮助您更详细地了解更多信息。也许发布一些代码。

答案 1 :(得分:0)

  

不希望同时调用它

这表示"串行队列"。这可以是调度队列或操作队列。但是串行队列是一次只能运行一个任务的队列。

或者,您可以将循环与重复振动分离并设置定时器以在循环进行时运行,这将反复调用您的振动程序,然后在循环结束时取消定时器。您可以使用标准NSTimer并将调用分派给您想要的任何队列,也可以使用GCD计时器,您可以在后台队列上安排。

这取决于振动程序如何工作的细节以及循环的性质。我们需要更多详细信息(例如,描述更广泛的问题以及此问题的性质"振动"常规)以帮助您进一步。