ThreadID和該Thread 的Handle問題! |
尚未結案
|
Clarinet
高階會員 發表:9 回覆:97 積分:126 註冊:2002-05-08 發送簡訊給我 |
請教各位先進ThreadID和該Thread 的Handle問題! 小弟產生了一個Thread, 由TThread而來,產生多個Thread後,列出產生出來Thread的 "ThreadID"和該"Handle",
發現會產生
一、相同的Handle和ThreadID
二、或者不同的Handle,但相同的ThreadID
三、或者相同的Handle,而不同的ThreadID
請問這是正常的現象嗎?
因為,小弟觀念上認為應該不會有相同的Handle和相同的ThreadID產生,但實際上來看卻是有這樣的狀況!不知是何原因!
搜尋過文章後,好像沒有人提到此!
看了TThread的程式,裡面是用到BeginThread, 而BeginThread是用到CreateThread, 裡面是傳入FThreadID, 而回傳Handle,表示此是由系統產生的,但系統為何為產生相同的呢?
TXXThread = class(TThread) private ............. public Constructor Create(........); destructor Destroy; override; procedure Execute; override; .............. end; Constructor TXXThread.Create(........); begin .......... inherited Create(False); end; destructor TXXThread.Destroy; begin .............. inherited; end; procedure TXXThread.Execute; begin FreeOnTerminate :=True; ......... ........ end; 我都是直接這樣動態產生的 procedure TFORM1.XXXXXXX; begin TXXThread.Create(....); end; 有什麼方法能讓產生的Thread,不要有相同的Handle和ThreadID嗎? 謝謝!GPS(全球衛星定位系統) http://www.allgps.com
------
GPS(全球衛星定位系統) http://www.allgps.com |
Chance36
版主 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
Clarinet 你好 我想這應該是Handle及ThreadID的回收處理機制所致,還活著的執行緒是不會有相同的Handle及ThreadID的,但已釋放的執行緒的Handle及ThreadID若不能重複使用,試想你的系統有多少個Handle及ThreadID可以使用呢?(尤其是日夜不停的伺服器) 試著把FreeOnTerminate :=True;這行拿掉後試試,應該就可以得到完全不相同的Handle及ThreadID了,因為建立的執行緒並未自動釋放,但是如此做你的電腦大概也撐不了多久(視建立執行緒的速度而定)
|
Clarinet
高階會員 發表:9 回覆:97 積分:126 註冊:2002-05-08 發送簡訊給我 |
引言: Clarinet 你好 我想這應該是Handle及ThreadID的回收處理機制所致,還活著的執行緒是不會有相同的Handle及ThreadID的,但已釋放的執行緒的Handle及ThreadID若不能重複使用,試想你的系統有多少個Handle及ThreadID可以使用呢?(尤其是日夜不停的伺服器) 試著把FreeOnTerminate :=True;這行拿掉後試試,應該就可以得到完全不相同的Handle及ThreadID了,因為建立的執行緒並未自動釋放,但是如此做你的電腦大概也撐不了多久(視建立執行緒的速度而定)Chance36你好: 依據目前觀察的狀況,是前一個Thread未結束,但卻發現後來產生的Thread卻有相同的Handle或ThreadID,而非之前的Thread結束後才發生相同的。 至於Thread最後是否真正有結束的話,可能要再仔細觀察看看。 由於產生的每一個Thread會透過DCOM向另一台電腦取得相關資料,而對方提說相同的Thread在前一個動作未完成之後,即又再要求另一個動作,而造成對方的系統產生類似遞迴的狀況! 而以我這邊來講的話Thread應該是已完成了而結束!依Chance36兄所說的是回收機制而再產生相同的Handle,因此,我可能要提出Thread已完成且結束,之後產生的是新的Thread但是有相同的Handle,而非同一個Thread在前一個動作未完成之後,又要求下一個動作而造成對方系統產生類似遞迴的狀況! 謝謝Chance36的解說,讓小弟我有一個方向可尋!十分感激! 我會先試試,看結果如何! 若有其它的方面或測試方法,請各位先進多多指教! 謝謝! GPS(全球衛星定位系統) http://www.allgps.com
------
GPS(全球衛星定位系統) http://www.allgps.com |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |