線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2359
推到 Plurk!
推到 Facebook!

ThreadID和該Thread 的Handle問題!

尚未結案
Clarinet
高階會員


發表:9
回覆:97
積分:126
註冊:2002-05-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-06 18:37:47 IP:61.30.xxx.xxx 未訂閱
請教各位先進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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-06 19:13:58 IP:211.20.xxx.xxx 未訂閱
Clarinet 你好     我想這應該是Handle及ThreadID的回收處理機制所致,還活著的執行緒是不會有相同的Handle及ThreadID的,但已釋放的執行緒的Handle及ThreadID若不能重複使用,試想你的系統有多少個Handle及ThreadID可以使用呢?(尤其是日夜不停的伺服器)    試著把FreeOnTerminate :=True;這行拿掉後試試,應該就可以得到完全不相同的Handle及ThreadID了,因為建立的執行緒並未自動釋放,但是如此做你的電腦大概也撐不了多久(視建立執行緒的速度而定)
Clarinet
高階會員


發表:9
回覆:97
積分:126
註冊:2002-05-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-07 09:49:45 IP:61.30.xxx.xxx 未訂閱
引言: 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
系統時間:2024-05-18 22:01:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!