我打算在程序运行时同时运行一个辅助线程,用来处理主线程发给它的各种任务.在程序启动时我就同时构造了这个辅助线程,请问这个线程构造好后如何等待主线程发给它的任务呢?我在辅助线程里加了一个style属性用来记录任务类型,一个executed属性用来判断该任务是否被执行过。也就是说有任务的话,主线程就把这个属性设置能false,辅助线程就不停的判断executed是否为false,如果是,就执行线程execute,如果不是就继续挂起。如何才能让线程在不消耗太多资源的情况下不停的判断呢?我在execute过程里用while true do,虽然实现了但是我担心这样很消耗资源?是否有什么现成的属性设置呢?初学线程,请大家指教。
解决方案 »
- Delphi 6.0 IDE 失去反应
- 求一段让LABEL动起来的代码。
- SQL数据库连接密码设置问题
- dll窗体重用性的问题,请高手指导
- 如何截获DBGRID的滚动条的点击、移动事件
- 关于制作登陆界面的问题。
- Help!!!!!!如果用代码动态连接SQL
- try....except on xx do,'xx'应该是什么?
- 谁碰到过TREEVIEW在点击的过程中TreeView1.topitem被莫名其妙换掉的情况?
- 怎样编程使IE在访问新主页时打开新窗口?怎样使IE在同一窗口打开新主页?
- 如何依据类容器的某个成员排序
- 我下载了CodeGearRADStudio2007_v11.0.2804.9245.5.iso,不会用。
使用while true do语句让线程永久循环执行,然后在执行完一次while以后调用Suspend方法挂起,当用到该线程时再使用resume方法恢复循环.
begin
Suspend;
if Terminated then Exit;
DoAction;
end;
var
newWorker: TWorker;
begin
...
newWorker := new TWorker;
newWorker.* := *;//配置任务内容
thread.Worker := newWorker;//这里需要先判断线程前一任务是否已经完成
thread.Resume;
..
end;
Hand:THandle;
Hand:=CreateEvent(nil,True,False,nil);SetEvent(Hand); WaitForSingleObject(Hand,1000); CloseHandle(Hand);