2017-10-17 69 views
0

我有功能,调度函数调用

-(void)serverFetch{ 
    //server fetch 
} 

在每15mintutes,我打电话使用的NSTimer这种方法,

[NSTimer scheduledTimerWithTimeInterval:900.0f repeats:YES block:^(NSTimer * _Nonnull timer) { 


    [self fetchFromServer]; 


}]; 

我使用APNS在我的应用程序,所以当我们收到通知,我再次调用这个方法。 因此调度程序线程和此通知线程不应该并行发生。例如,当调度程序线程正在运行并且推送通知到达时,推送通知线程应等待调度程序线程。如何实现此目的?

回答

0

一种方法是使用Grand Central Dispatch(GCD)。创建一个串行队列,并在您的计时器触发或通知到达时为其添加块以进行异步执行,这些块将严格依次执行。如果每个块所做的工作是完全同步的,也就是块返回其所有工作完成时,这将仅工作正确。

如果你的块包含异步工作,那么你还需要一个信号量。块应该在开始执行时获取信号量,并且它的最终异步操作应该释放它。通过这种方式,虽然通过串行队列回报和队列调度块开始下一个块,明年块将立即封锁等到先前块的最后异步操作释放它获取信号。

如果学习GCD,设计解决方案,并实现它之后你有问题提出新问题,表明你写的代码,并说明问题。有人会无疑帮助你前进。

HTH