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
相关文档:
CTRL+SPACE 代码补全,很好用的(先改了输入法热键)
CTRL+SHIFT+C 编写申明或者补上函数
CTRL+SHIFT+↑(↓) 在过程、函数、事件内部, 可跳跃到相应的过程、函数、事件的定义(在INTERFACE和IMPLEMENTATION之间来回切换)
CTRL+SHIFT+G 插入GUID
CTRL+J (弹出DELPHI语句提示窗口,选择所需语句将自动完成一条 ......
TThread是一个抽象类,用于在delphi中创建线程。
创建一个TThread的子类对象即相当于创建一个线程。
当一个应用程序运行时,应用程序就被载入内存准备执行。此时,它成为包含一个或多个线程的进程。线程执行应用程序的部分内容,并由操作系统分配CPU时间。同一进程的所有线程共享同一地址空间,可以访问进程的全局变量 ......
Delphi使用资源文件全攻略
在通常情况下使用delphi设计程序,都是将字符串、图像等资源直接使用delphi提供的vcl控件加到*.dfm中,这样做会合修改这些资源时带来不便,如果资源被多次引用,这些资源在程序启动时都被加载到内存中,非常耗费系统资源。因此,这就需要一种新的引用资源的文件:资源文件。资源 ......
信号量是建立在互斥量的基础之上,同时加入重要特性:提供了资源计数功能,因此预定义数量的线程同时可以进入同步的代码块中。
信号量是维护0到指定最大值之间的计数器的同步对象,当线程完成一次信号量的等待时,计数器自减1,当线程释放信号量对象时,计数器自增1。
......
Event事件用法与Mutex差不多,但它可以使用:SetEvent(启动运行)ResetEvent(暂停运行)、PulseEvent(执行一次后立即暂停)。
先看一下创建函数:CreateEvent(
......