1)自動(dòng)退出:
一個(gè)線程從execute()過程中退出,即意味著線程的終止,此時(shí)將調(diào)用windows的exitthread()函數(shù)來清除線程所占用的堆棧。 如果線程對象的 freeonterminate 屬性設(shè)為true,則線程對象將自動(dòng)刪除,并釋放線程所占用的資源。 這是消除線程對象最簡單的辦法。 2)受控退出: 利用線程對象的terminate屬性,可以由進(jìn)程或者由其他線程控制線程的退出。只需要簡單的調(diào)用該線程的terminate方法,并設(shè)直線程對象的terminate屬性為true。 在線程中,應(yīng)該不斷監(jiān)視terminate的值,一旦發(fā)現(xiàn)為true,則退出,例如在execute()過程中可以這樣寫: while not terminated do begin ........ end; 3)退出的api 函數(shù): 關(guān)于線程退出的api 函數(shù)聲明如下:code function terminatethread(hthread:thandle;dwexitcode:dword); 不過,這個(gè)函數(shù)會使代碼立刻終止,而不管程序中有沒有 try....finally 機(jī)制,可能會導(dǎo)致錯(cuò)誤,不到萬不得已,最好不要使用。 4) 利用掛起線程的方法(suspend) 利用掛起線程的suspend方法,后面跟個(gè)free,也可以釋放線程,例如: thread1.suspend; //掛起 thread2.free; //釋放 |
|