每个线程都有一个TContext的记录,它记录是包含有一个线程状态信息的数据结构,
即包含线程运行时的CPU寄存器状态信息,
PContext = ^TContext;
TCONTEXT = record
ContextFlags: DWORD;
Dr0: DWORD;
Dr1: DWORD;
Dr2: DWORD;
Dr3: DWORD;
Dr6: DWORD;
Dr7: DWORD;
FloatSave: TFloatingSaveArea;
SegGs: DWORD;
SegFs: DWORD;
SegEs: DWORD;
SegDs: DWORD;
Edi: DWORD;
Esi: DWORD;
Ebx: DWORD;
Edx: DWORD;
Ecx: DWORD;
Eax: DWORD;
Ebp: DWORD;
Eip: DWORD;
SegCs: DWORD;
EFlags: DWORD;
Esp: DWORD;
SegSs: DWORD;
end;
每次线程切换,则将CPU的寄存器内容保存到前时刻执行的线程的TContext,
再欲执行的线程的TContext的内容被载入CPU的寄存器中,若学过汇编
的话,执行切换的操作应该只须几个指令,现在的CPU都是几十兆的MIPS,
所以你完全可以放心线程切换的开销会不会占用太多的CPU.
若想线程再空余时间运行则:
TThread.Priority:=tpIdle;
这样此线程只会在主线程空的时候被执行,如等待按键,事件等待(WaitForSingleObject)等等。