2011-05-22 37 views
0

我在我的日誌中看到「killThread」,但線程不停止。如果我在調用循環之前將mKillThread設置爲true,它將永遠不會運行。我試着簡單地使用bool mKillThread並使用一個屬性和self.mKillThread ...以下是代碼中對mKillThread的唯一引用。iPhone - 不能殺死我的線程與循環

初始化:

mKillThread = false; 
//mKillThread = true; 
[NSThread detachNewThreadSelector:@selector(threadLoop) toTarget:self withObject:nil]; 

主題的東西:

// Called on main thread 
- (void)killThread { 
    NSLog(@"killThread"); 
    mKillThread = true; 
} 

- (void)threadLoop { 
    while (!mKillThread) { 
     if (mKillThread) { 

      NSLog(@"killthread haha!"); 
      return; 
     } 
     NSLog(@"looping!"); 
    } 
} 

編輯 -

想通了,我曾在廈門國際銀行設置爲MyViewSubclass所以我創建2個線程2次。我只是在自定義視圖上調用killThread,而不是其他視圖。我的天啊。

+0

更正的語法高亮顯示。 – Anne 2011-05-22 19:23:52

回答

0

嘗試將變量mKillThread設置爲volatile。這會對編譯器說,這個變量將被用在多個線程中,它不應該做一些優化,這可能會導致你的問題。

volatile bool mKillThread; 
0

推測編譯器優化掉的if子句完全的,因爲它可以推斷whilemKillThread內部必須false,因此if子句是沒有必要的。

請注意(Objective-)C(++)編譯器允許執行此類優化。

要告訴編譯器可以從另一個線程等訪問變量,請使用volatile。 或通過getter訪問它也足夠,[self mKillThread]