请问关于线程等待的有关问题

请教关于线程等待的问题
线程定义

  TClientDataThread = class(TThread)
  private
  Bufferdatastr :string;
  public
  BufferdatastrList:TStringlist;
  clienthost:string;
  paused:boolean;
  TcpClient_DataThread:TTcpClient;
  DT_ADC:TADOConnection;
  procedure synchNewData;
  constructor Create(CreateSuspended: Boolean);
  procedure Execute; override;
  end;


线程的动作
procedure TClientDataThread.Execute;
begin
  while not Terminated do
  begin
  while BufferdatastrList.Count=0 do //感觉这里有点不对劲的地方,这里是不是一直会占用系统资源?
  begin //记得线程好象有waitfor的,如果这里要改用waitfor应该怎样去改啊?
  application.ProcessMessages; //另外BufferdatastrList是程序主线程给它添加节点的
  sleep(1);
  end;
  synchNewData;
  WaitFor;
  end;
  TcpClient_DataThread.Free;
  if DT_ADC<>nil then
  begin
  DT_ADC.Connected:=false;
  DT_ADC.free;
  end;
end;


先谢谢大家啦!!


------解决方案--------------------
while BufferdatastrList.Count=0 do //感觉这里有点不对劲的地方,这里是不是一直会占用系统资源?
begin //记得线程好象有waitfor的,如果这里要改用waitfor应该怎样去改啊?
application.ProcessMessages; //另外BufferdatastrList是程序主线程给它添加节点的
sleep(1);--------------如果这里不加这句的话 就会一直占用系统资源,加了就没事了~~~~~
end;
------解决方案--------------------
这线程明显有问题,在线程执行函数里等待自身,WaitFor不能等待自身,会线程死锁的
你要等待可以用WaitForSingleObject,自己用CreateEvent创建个事件
------解决方案--------------------
application.ProcessMessages
注意:线程里面不能用上句。你看看诸多例子中,都没有这样用的。
------解决方案--------------------
while BufferdatastrList.Count=0 do //感觉这里有点不对劲的地方,这里是不是一直会占用系统资源?
begin //记得线程好象有waitfor的,如果这里要改用waitfor应该怎样去改啊?
application.ProcessMessages; //另外BufferdatastrList是程序主线程给它添加节点的
sleep(1);--------------如果这里不加这句的话 就会一直占用系统资源,加了就没事了~~~~~
end;

你的线程在空转,消耗CPU不知道么??
BufferdatastrList.Count=0
这个如果是大多数时间成立,而且也必须要做操作的话,那么表明的业务很频繁,频繁到要一直占用CPU。
如果你的要求不是1MS就轮巡一次的话,可以SLEEP久点,防止CPU空转。
------解决方案--------------------
uses SyncObjs;
......
var
Fevent:TSimpleEvent;
.....

 FEvent:=TSimpleEvent.Create;
.......
 if Fevent.WaitFor(300)<>wrTimeout then
.....
 Fevent.ResetEvent;
.....