我正在使用接受的答案中的方法來構造一個gameloop線程。線程中斷與JNI函數調用
Where to stop/destroy threads in Android Service class?
此刻,我的線基本上得到了時間,使一個單一的固有函數調用,更新遊戲邏輯,然後通過調整傳遞時間睡覺。
什麼我很好奇,因爲我仍然不是很舒服的線程,線程被中斷()殺死多快?如果它在Native函數中運行的代碼的中間,它會停在它的中間,還是會安全地完成?
由於時間提前, 耶利米
我正在使用接受的答案中的方法來構造一個gameloop線程。線程中斷與JNI函數調用
Where to stop/destroy threads in Android Service class?
此刻,我的線基本上得到了時間,使一個單一的固有函數調用,更新遊戲邏輯,然後通過調整傳遞時間睡覺。
什麼我很好奇,因爲我仍然不是很舒服的線程,線程被中斷()殺死多快?如果它在Native函數中運行的代碼的中間,它會停在它的中間,還是會安全地完成?
由於時間提前, 耶利米
不用擔心,在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
}
}
更新:
此外,該文件規定:
如果沒有以前的條件保存,則該線程的中斷狀態將被設置。
但是,如果它沒有被這些方法之一阻塞,說調用本地方法......它會停止嗎? – Maximus 2011-06-16 21:02:21
@Maximus,不,它不會停止...只有'isInterrupted'狀態被設置,所以你必須在每次循環時檢查狀態。 – Kiril 2011-06-16 21:09:17
非常奇妙,非常感謝。 – Maximus 2011-06-16 21:09:35