생성 대기 시간이 45 초가 걸리는 구성의 글로벌 대기열에 타이머를 만들지 만 어떤 이유로 든 작동하지 않는 것 같습니다. 그것을 지금 발사하기 위하여 바꾸는 것은 또한 아무것도하지 않는다.DISPATCH_SOURCE_TYPE_TIMER이 (가) 실행되지 않음
나머지 앱에는 많은 일이 일어나기 때문에 타이머가 사전 실행 중임을 알 수 있습니다.
이 타이머가 생성하는 방법입니다
dispatch_queue_t globalQueue =
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);
timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, globalQueue);
if (timer) {
// start 45 seconds for now
dispatch_time_t startTime = dispatch_time(DISPATCH_TIME_NOW, 45ull * NSEC_PER_SEC);
uint64_t interval = 15ull * NSEC_PER_SEC; // every 15 seconds, converted to nanosecs
// leeway:8 microseconds
dispatch_source_set_timer(timer, startTime, interval, 8000ull);
dispatch_source_set_event_handler(timer, block); // block is passed in
dispatch_resume(timer);
1)가 발사하지 왜 디버깅하려고하는 좋은 방법이 무엇/알아? 그렇지 않은 경우
2) 특정 시점의 대기열에서 실행되도록 예약 된 모든 주어진 작업을 나열하는 방법이 있습니까?
일부 작업은 시뮬레이터에서 실행할 수 없으므로 테스트 장치 자체에서 디버깅해야합니다.
우선 순위를 DISPATCH_QUEUE_PRIORITY_NORMAL (으)로 변경하면 궁금합니다. 또한, 그 블록이 NULL이 아닌지 확인하고 있다고 가정합니다. –
수정 - 블록이 NULL이 아니며 타이머가 실행되는 유일한 시간은 DISPATCH_QUEUE_PRIORITY_HIGH로 구성되었을 때입니다.이 타이머는 실행될 수 없습니다. 그래서 우선 순위가 낮은 대기열에서 차단되는 것을 알아내는 데 도움이되는 도구가 있는지 또는 모든 코드를 추적해야 하는지를 파악하려고합니다. –
낮은 우선 순위로 실행되도록 구성 할 수있는 항목 수에는 제한이 있습니까? –