我在项目中的一个线程上调用一个函数。
[self performSelectorInBackground:@selector(shortVibration) withObject: nil];
它被循环调用。
我想在自己的线程上调用该函数。
我不希望它同时被调用(如果这个线程调用处于循环中......它就是这样)
所以,我不想再次调用我的线程函数,直到最后一个执行完毕。
我该怎么做?
答案 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计时器,您可以在后台队列上安排。
这取决于振动程序如何工作的细节以及循环的性质。我们需要更多详细信息(例如,描述更广泛的问题以及此问题的性质"振动"常规)以帮助您进一步。