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;
我想请教下这是怎么回事?   

解决方案 »

  1.   

    如果不是在线程中运行这段代码,应该是没问题的,那么问题应该出在别处,检查一下你处理消息或者事件的代码在什么位置,在Delphi中按F8,然后打开CPU查看窗口,CTRL+G,输入$004AEC03,然后往上查看,看函数或者过程名称是在那里,然后对应看源代码.
      

  2.   

    因为如果直接用Sleep(1000)这种会导致界面卡死状态,所以用这个函数来代替就没有卡死的现象,但是这个函数已经用了很久,一直没出现过问题,这次不知道怎么回事一运行到这句就错,没想明白原因在哪里