问题是这样的:
procedure start;
var
  i,j:Integer;
begin
  .....
  .....
  for i:=1 to zonenum do
  begin
    .......
    ........
    for j:=1 to nodenum do  //nodenum节点数
    begin
      setinidata(i,j)....//执行过程1
      getdata(i,j)......//过程2
      countdata(i,j).......//过程3
      outputdata(i,j)......//过程4
    end;
    //之后,每个节点要延迟一定的时间要重复执行过程1~过程4,直到有干预,这个延迟时间由上次执行的过程3计算出的一个值来控制(延迟的时间是变化的),即
   //
   // 
   //    。延迟一段时间
   //    setinidata(i,j)....//执行过程1
   //   getdata(i,j)......//过程2
   //   countdata(i,j).......//过程3
   //   outputdata(i,j)......//过程4 
   //每个节点都执行
请问这个地方用多线程应该怎么写,用sleep的话会占用很大的cpu吧
用时间控件的话,各个节点的延迟时间不一样,不知道该怎么处理请问要是用多线程的话应该怎么写,对多线程不太了解,请详细点,谢谢
要是用时间控件的话,应该怎么处理
用多线程好还是时间控件好,还是  end;谢谢!  
end; 

解决方案 »

  1.   

    sleep怎么会占用CPU,通俗点讲sleep就是告诉系统把这个线程挂起的时间,这段时间CPU不分配时间给这个线程
    sleep一般不放在主线程,因为这样看上去程序类似死循环的假死现象,其实也是因为CPU没有分配时间给主线程,不存在占用CPU,误导啊误导...
      

  2.   

    如果要求不是太精确的话,可以考虑procedure TickSleep(const TickCount:LongInt);
    var
       StartTick:LongInt;
       Counter:LongInt;begin
       StartTick:=GetTickCount;
       Counter:=GetTickCount;
       while (Counter-StartTick)<TickCount do
       begin
          Sleep(0);
          Counter:=GetTickCount;
       end;
    end;
      

  3.   

    Sleep不占用cpu,不过在主线程中用的话会导致程序挂起
    如果对时间没要求就用Timer吧
    多线程:如果你不熟还是不要用了