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