呵呵,用ics的人注意,大家看看能否解决(100分)

  • 主题发起人 主题发起人 netmoles
  • 开始时间 开始时间
N

netmoles

Unregistered / Unconfirmed
GUEST, unregistred user!
我发现运行ics中demo的ftpthrd例子,cpu的占用率达到了100%,
如果不用线程,"ftptst例子"的cpu的占用率不会达到了100%,
但httpget例子的cpu的占用率也会达到了100%,要如何合理使用ics的控件
谁有好的解决方法?不知道indy等有没有这种问题?
 
我早发现了,改源码,就是在处理消息之前加上 WaitMessage() 就搞掂了
其实那也不是真正的100%,他不停的PeekMessage,如果别的程序不忙,他就是100%
如果别的程序有事情做,就会让给别的程序占用100%,他不会阻挡别人干活
 
to Pipi.
呵呵,好象确实如此,ics也回信来说了同样的意思:
If you use SYNC methods for the components the CPU rate will "appear" to be
100% but in fact it is not. If you use the ASYNC methods then you will see a
more accurate %.

TO show you that you are NOT REALLY using 100% just load about 10 programs
and you will see that they all get a fair share of time :)

Pipi.如果做过,能否告诉我是哪个函数前加上 WaitMessage() ,省的我再找:)
 
是不是在这个函数中
function TCustomWSocket.ProcessMessage : Boolean;
var
Msg : TMsg;
begin
Result := FALSE;
WaitMessage(); //added netmoles
if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then begin
Result := TRUE;
if Msg.Message = WM_QUIT then
FTerminated := TRUE
else begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;
end;
 
好象还是100%,不过如果是这种情况,那应该无所谓改动了。
 
在那里加只对多线程的有效,因为那个只是多线程的process messages
你要在用到的实际的pas,比如httpprot.pas里面改
你在httpprot.pas你查找ProcessMessages就是了,在它的前面找个合适的地方加
其它的什么ftp之类也一样
 
呵呵,在procedure THttpCli.DoRequestSync(Rq : THttpRequest);中增加后,确实
出现了效果,Pipi.果真名不虚传!
 
那当然,Pipi.大虾可不是靠灌水发财的:)
 
Pipi.老大,在线程中还是有100%的占用率,能否帮助看看,
我的email:netmoles@email.com.cn
 
一个pas里面有很多个processmessages,有些是给单线程的有些是给多线程的,
你要放在各个版本的processmessages之前,
或者放的地方对,一个waitmessage就搞掂了两种情况
 
后退
顶部