2012-07-16 6 views
1

두 개의 타이머를 만들어야합니다. 하나는 UI 스레드에, 다른 하나는 백그라운드 스레드에 있습니다. 이 타이머는 서로 독립적입니다.iOS에서 백그라운드 스레드에 타이머를 만드는 방법

내가 사용할 시나리오; 기본적으로 UI 스레드의 응답을 테스트하려면이 기능이 필요합니다. UI 스레드의 TImer는 UI 스레드에서 lastUpdatedDatetime 속성을 200ms마다 업데이트합니다. 이 lastupdatedDatetime 속성을 200ms마다 폴링하는 백그라운드 스레드가 있습니다.

누구나 어떻게 알 수 있습니까?

+0

귀하의 질문은이 하나와 유사하다고 생각합니다. http://stackoverflow.com/questions/8304702/how-do-i-create-a-nstimer-on-a-background-thread – Selkie

답변

0

가 dispatch_async와 다른 스레드에 대한 호출을 발사하게됩니다 dispatch_after

dispatch_async로 보면, 이것은 내가 메인 스레드 변경을하는 데 사용하는 것입니다.

dispatch_after를 사용하면 dispatch_async를 몇 초 동안 지연시킬 수 있습니다.

이 두 항목을 함께 사용하면 스레드간에 앞뒤로 이동할 수 있습니다.

here is the documents on Grand Central Dispatch

1

NSTimer의 점은 실행 루프에 다른 이벤트를 처리하는 동안 스레드 (보통 메인 스레드)에서 실행해야 할 일을 예약 할 수있을 것입니다. 백그라운드 스레드에서 수행하려는 작업이 매 200ms마다 폴링하는 것이면 NSTimer를 사용하지 않고 대신 백그라운드 스레드를 잠자기하는 것이 훨씬 쉽습니다.

while (stillRunning) { 
    usleep(200*1000); 
    // Do something with lastUpdatedDatetime 
} 

이 기술은 스레드의 낭비 그러나 아마 그랜드 센트럴 디스패치를 ​​사용하는 것보다 테스트 용으로 더 결정적이다 : 그래서 설치 메인 스레드와 배경 스레드에 평소와 같은 NSTimer 같은 뭔가.

lastUpdatedDatetime이 원자 속성으로 설정되어야하는 NSDate 인 경우, 배경 스레드에서 액세스 할 때 유효한 개체를 수신해야합니다.

관련 문제