在线程中使用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
使用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
//msg: TMsg
while GetMessage(msg, 0, 0, 0) do
beginend;另一线程 发送消息时使用PostThreadMessage向上面线程发送消息
注意 PostThreadMessage的第一个参数是ThreadID 不是handle
在线程中使用Sleep;