在线程中使用SLEEP 导致程序 失去响应  CPU占用是少了很多
使用delay 程序有响应 但是相当占用CPU
两个混合使用吧 有时候不占 有时候非常占用
procedure Delay1(mS :integer);
var
beginTick ,endTick :Integer;
begin
beginTick :=GetTickCount;
  while True do
  begin
     Application.ProcessMessages;
     endTick :=GetTickCount;
     sleep(1);
   if (endTick - beginTick)>mS then
   Break;
  end;
end;
有没什么好一点的办法解决这个难题?
我写的一个程序 非常的奇怪
一个主线程 三个另外开的线程
在mmo组件 输出调试信息的时候
form1.mmo2.Lines.Add('正在进入线程1');
增加的越多 cpu占用越是不出问题,正常状态  0-1%
把输出调试信息全部删除了 就出现了占用 25%的状态 。4核的机器。
然后用了 sleep呢又好了很多 但是程序失去响应了。
用了delay呢 CPU占用非常高
用了 Delay1这个 混合的呢 有时候不高 有时候很高
我现在在想  该怎么写 才能 让程序  能够及时响应 又不占太高的CPU。
求写过的朋友  帮忙指点下。感觉 这个程序 写了3个多月 还是卡在这个 地方了。
非常感谢  。
给分有一些低,因为之前给分太多了。。DelphiCPU占用sleep

解决方案 »

  1.   

    你这个delay写的挺好了,sleep(1)有点少了,什么等待需要1微妙判断一些,改为sleep(50)或者sleep(100)会好很多
      

  2.   

    像下面这样就行了在线程的Execute中这样写
    //msg: TMsg
    while GetMessage(msg, 0, 0, 0) do
    beginend;另一线程 发送消息时使用PostThreadMessage向上面线程发送消息
    注意 PostThreadMessage的第一个参数是ThreadID 不是handle
      

  3.   

    同意2楼的,可以sleep时间长点,我就是用的 sleep(20)。
      

  4.   

    直接使用线程不行了嘛?
    在线程中使用Sleep;
      

  5.   

    子线程中不需要 Application.ProcessMessages;