2017-08-23 13 views
0

私はGCDタイマーを使って時間を計算しています。ディスパッチ時間間隔の前にGCDタイマーハンドラを実行

_timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_main_queue()); 
dispatch_source_set_timer(_timer, DISPATCH_TIME_NOW, 2.0 * NSEC_PER_SEC, 0); 
WEAKSELF 
dispatch_source_set_event_handler(_timer, ^{ 
    [weakSelf hideView]; 
    if (![APP_WINDOW.subviews containsObject:self]) { 
     dispatch_source_cancel(_timer); 
    } 
}); 

dispatch_source_set_cancel_handler(_timer, ^{ 
    NSLog(@"dispatch_source_t canceled"); 
}); 

dispatch_resume(_timer); 

ご覧のとおり、時間間隔は2秒です。 このコードを実行すると、イベントハンドラがすぐに実行されます。つまり、時間間隔の設定は機能しません。

なぜタイミングが要件を満たしていないのですか?

答えて

0

まずそれが明確で簡単です、あなたのGCDタイマーがGCD処理コード

@property (nonatomic, strong) dispatch_source_t timer; 


int count = 0; 


dispatch_queue_t queue = dispatch_get_main_queue(); 


self.timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue); 


// dispatch_time(DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC) 
dispatch_time_t start = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)); 
uint64_t interval = (uint64_t)(1.0 * NSEC_PER_SEC); 
dispatch_source_set_timer(self.timer, start, interval, 0); 


dispatch_source_set_event_handler(self.timer, ^{ 
    NSLog(@"------------%@", [NSThread currentThread]); 
    count++; 

    if (count == 4) { 

     dispatch_cancel(self.timer); 
     self.timer = nil; 
    } 
}); 


dispatch_resume(self.timer); 
+0

感謝を決定するために、適切

してから作業をしていることを確認 – Zedd

関連する問題