我有两个NSTimers应该从另一个并行运行。每个计时器控制UI的特定部分(Timer1
= UI A,Timer2
= UI B)。只要其各自的计时器达到X区间,UI A
和UI B
就会发生变化。但是,为了进行更改,UI A
需要检查UI B
的状态。
当我运行两个NSTimers时,它们之间有1秒的延迟:
firstSemaphoreTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(firstTimerTick) userInfo:nil repeats:YES];
secondSemaphoreTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(secondTimerTick) userInfo:nil repeats:YES];
如何使用线程同步这两个计时器?或者你推荐什么方法?
答案 0 :(得分:0)
您不需要两个计时器。您可以使用一个计时器处理这两个任务。
NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(tick:) userInfo:nil repeats:YES];
// ...
-(void)tick:(sender)id{
void(^processBlock)(void)= ^{
// process UI 1 and 2
};
if([NSThread isMainThread]){
processBlock();
}else{
dispatch_async(dispatch_get_main_queue(), processBlock);
}
}
即使使用两个计时器,也无法同时更新UI,因为它是在主队列上完成的。如果在更新依赖于它的UI后还有其他事情要做,您可以随时通过调用dispatch_sync来同步调度块。