Delphi多线程学习(8):优先级
一个线程的优先级取决于创建线程的进程的优先级(priority class)和线程本身相对的优先级(relative priority)。
1、进程优先级:
不同操作系统 优先级数目不同。Windows2000以上的版本列表如下:
Idle:(标志:IDLE_PRIORITY_CLASS,值为$40);
Below Normal:(标志:BELOW_NORMAL_PRIORITY_CLASS,值为$4000);
Normal:(标志:NORMAL_PRIORITY_CLASS,值为$20);
Above Normal:(标志:ABOVE_NORMAL_PRIORITY_CLASS,值为$8000);
High:(标志:HIGH_PRIORITY_CLASS,值为$80);
Realtime:(标志:REALTIME_PRIORITY_CLASS,值为$100)。
进程的缺省优先级为Normal,几乎所有场合都不应将优先级设为Realtime。
创建进程时给定优先级,只要在CreateProcess中,将优先级标志做“OR”操作,填入dwCreationFlags参数中。
取得活动进程的优先级:
function GetPriorityClass(hProcess:THandle):DWORD;stdcall;
设置活动进程的优先级:
function SetPriorityClass(hProcess:THandle;dwPriorityClass:DWORD);BOOL;
(上面两个函数的hProcess由GetCurrentProcess函数获得,这个句柄不用CloseHandle关闭)
2、线程相对优先级:
线程优先级分7类,如下:
tpIdle:(常量:THREAD_PRIORITY_IDLE,值为-15);
tpLowest:(常量:THREAD_PRIORITY_LOWEST,值为-2);
tpBelow Normal:(常量:THREAD_PRIORITY_BELOW_NORMAL,值为-1);
tpNormal:(常量:THREAD_PRIORITY_NORMAL,值为0);
tpAbove Normal:(常量:THREAD_PRIORITY_ABOVE_NORMAL,值为1);
tpHighest:(常量:THREAD_PRIORITY_HIGEST,值为2);
tpTimeCritical:(常量:THREAD_PRIORITY_TIME_CRITICAL,值为15);
对于线程类TThread,改变线程优先级非常方便,只要将派生类的Priority属性相应设置就好了。如:MyThread.Priority:=tpHighest;
3、线程优先级计算:
如果线程优先级为tpIdle,无论它所处的进程优先级是多少,线程整体优先级总是1,但是,当进程优先级为Realtime时,那么与tpIdle相组合,线程整体优先级为16;
如果线程优先级为tpTimeCritical,无论它所处的进程优先级为多少,整体优先组都是15,但是,当进程优先级是Realtime时,那与tpTim
相关文档:
例如以下代码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs;
type
TForm1 = class(TForm)
procedure one();
function two(x,y:integer):integer;
private
......
Delphi提供的字符串函数里有一个Pos函数,它的定义是:
function Pos(Substr: string; S: string): Integer;
它的作用是在字符串S中查找字符串Substr,返回值是Substr在S中第一次出现的位置,如果没有找到,返回值为0。
使用pos函数来查找字符第一次出现的位置
var
str1:string;
i,j:integer;
begin
str1:='dsf465 ......
http://www.91v1.cn/bbs/read.php?tid-1797.html
我们提供的是全套,目前他们发的.社区已录制完毕.一根毛不少.
-------------------------------------------------------------------------------------------------------------------------
该教程由91v1社区免费提供.具体免费领码详情观看种子包,
--------------- ......
2010-02-22 17:08:46
Delphi把多线程相关的API封装在TThread这个类中,可以方便实现多线程运用。首先看下TThread的声明:
TThread = class
private
FHandle: THandle;
FThreadID: THandle;
FCreateSuspended: Boolean;
FTerminated: Boolean;
FSuspended: Boolean;
FFreeOnTerminate: ......
信号量是建立在互斥量的基础之上,同时加入重要特性:提供了资源计数功能,因此预定义数量的线程同时可以进入同步的代码块中。
信号量是维护0到指定最大值之间的计数器的同步对象,当线程完成一次信号量的等待时,计数器自减1,当线程释放信号量对象时,计数器自增1。
......