2011-06-16 96 views
1

我正在使用接受的答案中的方法來構造一個gameloop線程。線程中斷與JNI函數調用

Where to stop/destroy threads in Android Service class?

此刻,我的線基本上得到了時間,使一個單一的固有函數調用,更新遊戲邏輯,然後通過調整傳遞時間睡覺。

什麼我很好奇,因爲我仍然不是很舒服的線程,線程被中斷()殺死多快?如果它在Native函數中運行的代碼的中間,它會停在它的中間,還是會安全地完成?

由於時間提前, 耶利米

回答

3

不用擔心,在documentation for interrupt says

如果該線程被阻塞在等待(的調用),等待(長),或等待(長,int)方法,或者該類的方法,或者該類的join(),join(long),join(long,int),sleep(long)或sleep(long,int)方法,然後調用其中斷狀態將被清除,它將收到一個InterruptedException。

因此,如果您處於某種阻塞/睡眠/等待狀態,您的線程將僅獲得InterruptedException。如果你正在運行,線程將不會得到異常,直到它進入其中一個狀態。

你的循環應該是:

while(!Thread.currentThread().isInterrupted()) // <- something of the sort here 
{ 
    try{ 
     // do work 
    } catch (InterruptedException e){ 
     // clean up 
    } 
} 

更新:
此外,該文件規定:

如果沒有以前的條件保存,則該線程的中斷狀態將被設置。

+0

但是,如果它沒有被這些方法之一阻塞,說調用本地方法......它會停止嗎? – Maximus 2011-06-16 21:02:21

+1

@Maximus,不,它不會停止...只有'isInterrupted'狀態被設置,所以你必須在每次循環時檢查狀態。 – Kiril 2011-06-16 21:09:17

+0

非常奇妙,非常感謝。 – Maximus 2011-06-16 21:09:35