線程異常該如何處理 windows窗體線程異常怎么解決?
windows窗體線程異常怎么解決?程序退出的方法:this.Close() 只是關(guān)閉當(dāng)前窗口,若不是主窗體的話(huà),是無(wú)法退出程序的,另外若有托管線程(非主線程),也無(wú)法干凈地退出;Applicatio
windows窗體線程異常怎么解決?
程序退出的方法:this.Close() 只是關(guān)閉當(dāng)前窗口,若不是主窗體的話(huà),是無(wú)法退出程序的,另外若有托管線程(非主線程),也無(wú)法干凈地退出;Application.Exit() 強(qiáng)制所有消息中止,退出所有的窗體,但是若有托管線程(非主線程)
Delphi線程中怎么拋出異常?
在Delphi中使用線程,當(dāng)窗體關(guān)閉時(shí),如果窗體中啟用了線程,一般需要手動(dòng)關(guān)閉,以釋放資源。 常用來(lái)結(jié)束線程的代碼為:
thread.Terminate
thread.WaitFor
即先觸發(fā)Terminate方法,然后等待線程的結(jié)束。這種方法要求線程不能使用
FreeOnTerminate := True
否則在WaitFor即將結(jié)束的時(shí)候會(huì)引發(fā)“無(wú)效句柄”的錯(cuò)誤。 這種方法在窗體關(guān)閉的時(shí)候會(huì)等待一段事件(因?yàn)閃aitFor)。
因此,如果不是在主窗體中結(jié)束線程時(shí),其實(shí)我們可以不必使用WaitFor。而是采用如下方法: 將FreeOnTerminate := True這樣在窗體關(guān)閉的代碼中直接調(diào)用
thread.Terminate 即可。
注意: 如果設(shè)置了 thread.OnTerminate := SomeFunction 那么在調(diào)用PcmThrd.Terminate前盡量將thread.OnTerminate := nil,以免結(jié)束線程后SomeFunction中的變量出現(xiàn)空指針錯(cuò)誤。當(dāng)然,這不是絕對(duì)的,需要根據(jù)具體程序而定 .