如何设定:使某子线程只能在主线程及其余线程的空闲时间执行?(有无可能?)(50分)

  • 主题发起人 主题发起人 vai
  • 开始时间 开始时间
V

vai

Unregistered / Unconfirmed
GUEST, unregistred user!
线程切换之间的开销会有多大?(时间上的)
 
看了看帮助,是不是就是调度优先级?
TThread.Priority:=tpIdle;
The thread executes only when the system is idle-Windows won't
interrupt other threads to execute a thread with tpIdle priority.
 
>某子线程只能在主线程及其余线程的空闲时间执行
不知你想干什么?
可以降低某子线程的优先级, 至少要低于主线程及其余线程.
也可以在主线程及其余线程中把某线程挂起SuspendThread,结束时再ResumeThread
 
每个线程都有一个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)等等。
 
要保险的话还是要用信号量等同步手段。
 

Similar threads

回复
0
查看
848
不得闲
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部