2012-07-16 63 views
1

我需要創建兩個定時器。一個在UI線程上,另一個在後臺線程上。這些定時器彼此獨立。如何在iOS的後臺線程中創建一個定時器

情景,我將使用;我基本上需要這個來測試UI線程的響應性。 UI線程中的TImer線程在UI線程中每200ms更新一次lastUpdatedDatetime屬性。還有一個後臺線程,每200ms輪詢一次lastupdatedDatetime屬性。

有誰知道我能做到這一點?

+0

我覺得你的問題是類似這樣的: http://stackoverflow.com/questions/8304702/how-do-i-create-a-nstimer-on-a-background-thread – Selkie 2012-07-16 22:36:29

回答

0

考慮dispatch_async和dispatch_after

dispatch_async會讓你火給另一個線程調用,這是我用做主線的變化。

dispatch_after會讓你延遲一個dispatch_async的秒數。

這兩個結合將讓你來回線程之間。

here is the documents on Grand Central Dispatch

1

的NSTimer的一點是一定要能夠安排的事情,而它正在處理在運行循環其他事件的線程(通常是主線程)運行。如果您想在後臺線程上執行的任何操作都是每隔200毫秒輪詢一次,那麼不使用NSTimer就更容易,而只是睡後臺線程。因此,建立一個NSTimer像往常一樣在你的主線程在後臺線程做這樣的事情:

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

這種技術是一種浪費一個線程,但可能是出於測試目的不是使用大中央派遣更多的確定性。

記住,如果lastUpdatedDatetime是一個NSDate是這樣,當你訪問它在後臺線程你一定要得到一個有效的對象應被設置成一個原子屬性。

相關問題