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

怎么设置线程的全面优先级?

答題得分者是:aquarius
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-25 09:24:52 IP:61.155.xxx.xxx 未訂閱
怎么设置线程的全面优先级? 线程的优先级是(1~31)可调的,但是怎样设置这样的优先级拉! 有什么规则吗?
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-25 15:02:02 IP:61.155.xxx.xxx 未訂閱
我是在书上看到的,但是我不太懂; 如果谁了解THREAD请告诉我,怎样才能正确的使用谢谢!
aquarius
資深會員


發表:3
回覆:347
積分:330
註冊:2003-05-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-26 18:29:00 IP:211.23.xxx.xxx 未訂閱
引言: 我是在书上看到的,但是我不太懂; 如果谁了解THREAD请告诉我,怎样才能正确的使用谢谢!
看看 DELPHI 的說明, 就講得很清楚啦!! 查 TThread.Priority 的說明. ...Aquarius
------
水瓶男的blog: http://791909.blogspot.com
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-27 08:25:15 IP:61.155.xxx.xxx 未訂閱
我知道TThread.Priority可以设置,但是我想知道(1~31) 优先级是怎么算出来的!!! 谢谢!
aquarius
資深會員


發表:3
回覆:347
積分:330
註冊:2003-05-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-27 14:50:26 IP:61.230.xxx.xxx 未訂閱
引言: 我知道TThread.Priority可以设置,但是我想知道(1~31) 优先级是怎么算出来的!!! 谢谢!
怎麼算? 很簡單, MS 定義好, 我們照著用. 就這麼簡單!!..... 事實上, 32 級還是分得太細, 所以不管是 VC 或 DELPHI, 把 THREAD 包成物件型式後, 都只提供了幾列舉型態讓設計者選. 你要是有興趣, 到 MSDN , 以 Thread Priority 當 KEYWORD 找一下, 有不少的說明. ...Aquarius
------
水瓶男的blog: http://791909.blogspot.com
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-27 15:39:18 IP:61.155.xxx.xxx 未訂閱
1、哪么我要设置3、13、26的优先级该怎样做? 2、THREADVAR我在书上看了N便了,但是总是感觉它没有什么用处! 请告之!!! 谢谢!
aquarius
資深會員


發表:3
回覆:347
積分:330
註冊:2003-05-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-07-28 01:12:31 IP:61.230.xxx.xxx 未訂閱
引言: 1、哪么我要设置3、13、26的优先级该怎样做? 2、THREADVAR我在书上看了N便了,但是总是感觉它没有什么用处!
1. 不是說了嗎, 去MSDN 看看吧!! http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/setthreadpriority.asp http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/win32_thread.asp 2. 書? 你 DELPHI 的 HELP 看了嗎? 寫得很白話呀... 以下取自 DELPHI 5 HELP Thread-local (or thread) variables are used in multithreaded applications. A thread-local variable is like a global variable, except that each thread of execution gets its own private copy of the variable, which cannot be accessed from other threads. 至於什麼時候會用到, 那就要看是什麼程式啦!! 我自己是沒用過. ...Aquarius
------
水瓶男的blog: http://791909.blogspot.com
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-07-28 07:25:02 IP:61.155.xxx.xxx 未訂閱
引言: 1. 不是說了嗎, 去MSDN 看看吧!! http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/setthreadpriority.asp http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/win32_thread.asp 2. 書? 你 DELPHI 的 HELP 看了嗎? 寫得很白話呀... 以下取自 DELPHI 5 HELP Thread-local (or thread) variables are used in multithreaded applications. A thread-local variable is like a global variable, except that each thread of execution gets its own private copy of the variable, which cannot be accessed from other threads. 至於什麼時候會用到, 那就要看是什麼程式啦!! 我自己是沒用過. ...Aquarius
那么,MSDN 定义的方式在的DELPHI同样适用吗?我看好像有点不同。还请aquarius 兄指教! 你说HREADVAR的DELPHI HELP ,我以前早就见过!但是不太懂,是不是它定义的VAR 可以被它所创建的实例所共享;如果是这样,他不如定义个PUBLIC VAR就可以了吗? 请aquarius兄指教了
aquarius
資深會員


發表:3
回覆:347
積分:330
註冊:2003-05-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-07-28 09:33:11 IP:211.23.xxx.xxx 未訂閱
引言: 那么,MSDN 定义的方式在的DELPHI同样适用吗?我看好像有点不同。还请aquarius 兄指教! 你说HREADVAR的DELPHI HELP ,我以前早就见过!但是不太懂,是不是它定义的VAR 可以被它所创建的实例所共享;如果是这样,他不如定义个PUBLIC VAR就可以了吗?
DELPHI 也只是把 MS 的定義再包一層起來呀... 追根究底, 還不是都呼叫到 MS Windows 的核心. ThreadVar 的範例如下 var iVar : integer ; ThreadVar iThreadVar : integer ; constructor TZThread.Create(sIn, sOut:string;h:THandle;iNum:integer); begin FIn:=sIn ; FOut:=sOut ; Fh:=h ; FiNum:=iNum ; FreeOnTerminate := false; inherited Create(False); end; procedure TZThread.Execute; begin inc(iVar) ; inc(iThreadVar) ; PostMessage(Fh,UM_ThreadDoneMsg,$BBBB,(iVar shl 16) or iThreadVar) ; PostMessage(Fh,UM_ThreadDoneMsg,$AAAA,FiNum) ; end ; procedure TForm1.UMThreadDone(var msg: TMessage); var s : string ; i : integer ; begin // 檢查是否為合法的 MSG, 避免別人誤送 if msg.WParam<>$AAAA then begin if msg.WParam=$BBBB then begin Memo1.Lines.Add(format('var=%d, ThreadVar=%d',[msg.lParamHi,msg.lParamLo])) ; end ; exit ; end ; s:=inttostr(msg.lParam) ; i:=lbThreadList.Items.IndexOf(s) ; if i>=0 then lbThreadList.Items.Delete(i) ; zta[msg.lParam].Terminate ; zta[msg.lParam].WaitFor ; zta[msg.lParam]:=nil ; end; 呼叫三次 Thread 後, 輸出如下 var=1, ThreadVar=1 var=2, ThreadVar=1 var=3, ThreadVar=1 就像 HELP 檔中說的, ThreadVar 和 Var 一樣, 可以宣告出 Global 變數. 但最大的不同是, 在 Thread 被建立時, 同時也會產生一份同名的變數, 也就是說每一個 Thread 雖然變數名字是用同一個, 實際上是用到不同的位址. 和宣告在 Public 有什麼不同, 還是有差異呀!! 至少放在 Public 中, 還可以被別的 THREAD 引用, 但是 ThreadVar 就不行, 每一份 Thread (MAIN PROCESS 也是一個 THREAD) 都各用一份獨立的位址. 為什麼要有這樣的功能, 一定是有人會用到嘛!! 又不是每個 COMPILER 提供的指令每個人都一定要用到. ...
------
水瓶男的blog: http://791909.blogspot.com
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-07-28 09:49:07 IP:61.155.xxx.xxx 未訂閱
1、那么,请问一下: delphi的进程优先类定义值$40  $4000  $20  $8000  $80  $100 分别为十进制的多少?    2、如上所说那么threadvar定义的与 private  i:integer; public .....    不是效果一样吗?    aquarius 兄,不要怪我问的麻烦;我想比较全面的了解thread,所以就...
aquarius
資深會員


發表:3
回覆:347
積分:330
註冊:2003-05-21

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-07-28 10:26:49 IP:211.23.xxx.xxx 未訂閱
引言: 1、那么,请问一下: delphi的进程优先类定义值$40 $4000 $20 $8000 $80 $100 分别为十进制的多少? 2、如上所说那么threadvar定义的与 private i:integer; public ..... 不是效果一样吗? aquarius 兄,不要怪我问的麻烦;我想比较全面的了解thread,所以就... < face="Verdana, Arial, Helvetica"> 你的數字那兒看到的? 我看到的如下 const THREAD_BASE_PRIORITY_LOWRT = 15; { value that gets a thread to LowRealtime-1 } {$EXTERNALSYM THREAD_BASE_PRIORITY_LOWRT} THREAD_BASE_PRIORITY_MAX = 2; { maximum thread base priority boost } {$EXTERNALSYM THREAD_BASE_PRIORITY_MAX} THREAD_BASE_PRIORITY_MIN = -2; { minimum thread base priority boost } {$EXTERNALSYM THREAD_BASE_PRIORITY_MIN} THREAD_BASE_PRIORITY_IDLE = -15; { value that gets a thread to idle } {$EXTERNALSYM THREAD_BASE_PRIORITY_IDLE} THREAD_PRIORITY_LOWEST = THREAD_BASE_PRIORITY_MIN; {$EXTERNALSYM THREAD_PRIORITY_LOWEST} THREAD_PRIORITY_BELOW_NORMAL = THREAD_PRIORITY_LOWEST 1; {$EXTERNALSYM THREAD_PRIORITY_BELOW_NORMAL} THREAD_PRIORITY_NORMAL = 0; {$EXTERNALSYM THREAD_PRIORITY_NORMAL} THREAD_PRIORITY_HIGHEST = THREAD_BASE_PRIORITY_MAX; {$EXTERNALSYM THREAD_PRIORITY_HIGHEST} THREAD_PRIORITY_ABOVE_NORMAL = THREAD_PRIORITY_HIGHEST - 1; {$EXTERNALSYM THREAD_PRIORITY_ABOVE_NORMAL} THREAD_PRIORITY_ERROR_RETURN = MAXLONG; {$EXTERNALSYM THREAD_PRIORITY_ERROR_RETURN} THREAD_PRIORITY_TIME_CRITICAL = THREAD_BASE_PRIORITY_LOWRT; {$EXTERNALSYM THREAD_PRIORITY_TIME_CRITICAL} THREAD_PRIORITY_IDLE = THREAD_BASE_PRIORITY_IDLE; {$EXTERNALSYM THREAD_PRIORITY_IDLE} 說到相同, 的確也是差不多, 只是宣告方法有小差異. 就像 PCHAR 和 以0 開始的 CHAR 陣列, 不也是差不多... 但是為了方便使用, DELPHI 還是定義了兩種不同的宣告方式呀! 又像 cardinal / DWORD / UINT 不也都是 32 BIT 無號整數. 要進一步的了解, 最快的方法就是多看看別人了
------
水瓶男的blog: http://791909.blogspot.com
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-07-28 11:15:34 IP:61.155.xxx.xxx 未訂閱
aquarius 兄: 上面是我看到的参考资料,但是不知道(1~31)是怎么算的!!! 好了这个问题就到此了,如果aquarius 兄有兴趣就帮我推荐一些好资料,多谢了!!!
系統時間:2024-05-11 4:08:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!