读书人

关于Application.ProcessMessages请问

发布时间: 2012-09-19 13:43:53 作者: rapoo

关于Application.ProcessMessages请教
procedure PDelay(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;

这是一个类似sleep的函数,以前一直用的好好的,前两天有个程序用了这个,每次运行到Application.ProcessMessages;就会出现BUG,BUG提示:
Project ReadDataPrj.exe raised exception class EAccessViolation with message 'Access violation at address 004AEC03 in module'ReadDataPrj.exe'. Write of address C8EOF23F'. Process stopped, User Step or Run to continue;
我想请教下这是怎么回事?



[解决办法]
那是Console程序么?
[解决办法]
循环中的Sleep(1);纯属多余。
[解决办法]
如果不是在线程中运行这段代码,应该是没问题的,那么问题应该出在别处,检查一下你处理消息或者事件的代码在什么位置,在Delphi中按F8,然后打开CPU查看窗口,CTRL+G,输入$004AEC03,然后往上查看,看函数或者过程名称是在那里,然后对应看源代码.
[解决办法]
我用的函数和你这个一样,一直在用,没问题

读书人网 >.NET

热点推荐