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
相关文档:
一个选单大致是这样:
1.可以被以某种形式呼叫出来,如按下esc;
2.在这个选单中功能键有不同的定义,如原本方向键控制走路,但现在改为控制光标的位置;
3.按下确定键后有对应功能被执行;
4.可以被关闭。
那么我的办法是编写两个子程,其中一个处理选单中的事件,另外一个专门负责画选单。
在从步行切换到选单 ......
TThread是一个抽象类,用于在delphi中创建线程。
创建一个TThread的子类对象即相当于创建一个线程。
当一个应用程序运行时,应用程序就被载入内存准备执行。此时,它成为包含一个或多个线程的进程。线程执行应用程序的部分内容,并由操作系统分配CPU时间。同一进程的所有线程共享同一地址空间,可以访问进程的全局变量 ......
Delphi使用资源文件全攻略
在通常情况下使用delphi设计程序,都是将字符串、图像等资源直接使用delphi提供的vcl控件加到*.dfm中,这样做会合修改这些资源时带来不便,如果资源被多次引用,这些资源在程序启动时都被加载到内存中,非常耗费系统资源。因此,这就需要一种新的引用资源的文件:资源文件。资源 ......
在使用多线程的时候,如果多线程对某个特定的公共数据或资源进行访问,需要对多线程进行协调操作,叫做线程同步。
例如:三个线程分别循环地向ListBox中写入数据。没有进行同步时,写入的顺序是不确定的。
{主窗体代码}
unit Unit2;
interface
uses
Windows, Messages, SysUtils, V ......
Event事件用法与Mutex差不多,但它可以使用:SetEvent(启动运行)ResetEvent(暂停运行)、PulseEvent(执行一次后立即暂停)。
先看一下创建函数:CreateEvent(
......