2013-03-12 69 views
0

我想用NSTimer以每頁20秒跑完一個功能,但我把NSTimerNSThread function.the代碼是這樣的:NSTimer無法在NSThread函數中啓動或運行?

-(void)func1 
{ 
    [NSThread detachNewThreadSelector:@selector(func2) 
         toTarget:self withObject:nil]; 
} 
-(void)func2 
{ 
    [NSTimer scheduledTimerWithTimeInterval:3 target:self   
    selector:@selector(func3) userInfo:nil repeats:YES]; 
} 
-(void)func3 
{ 
    //do something,but the function seems never be executed 
} 

所以問題是,FUNC3從未被執行NSTimer in func2.有人說NSTimer只能運行在main thread。這是真的嗎??所以不能在NSTimer啓動一個NSThread函數?

回答

4

它看起來對我來說,你的線程沒有做任何事情。定時器被安排作爲線程運行循環的一部分進行檢查。如果線程沒有運行任何代碼,那麼它將不會通過它的運行循環。

認爲它是這樣的:

  • 開始螺紋
  • 開始線程運行的循環
  • -func2
  • 結束運行循環
  • 睡眠螺紋

您已經計劃了定時器在你後面睡覺的線程上設置計時器。沒有運行循環;沒有定時器火災。


UPDATE

我的回答回答了這個問題,但是沒有得到解決。你希望達到的最終效果是什麼?

+0

@Thomasso你的意思是NSTimer可以在NSThread中設置和運行,不僅在主線程中? – SgViTiNer 2013-03-12 02:57:44

+0

如果您有長時間運行的線程,那麼您可以在其上設置一個定時器。長時間運行的線程就像是一個網絡線程,它正在後臺下載數據或從相機或麥克風輸入線程處理。 – 2013-03-12 03:09:47

+0

它甚至沒有去睡覺;線程體是'func2'方法,它調度定時器,然後立即返回,線程退出。 – 2013-03-12 07:40:45