关于Application.ProcessMessages请教

delphi2102 2012-08-16 11:02:22
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;
我想请教下这是怎么回事?

...全文
176 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
cdchq 2012-08-16
  • 打赏
  • 举报
回复
我用的函数和你这个一样,一直在用,没问题
delphi2102 2012-08-16
  • 打赏
  • 举报
回复
因为如果直接用Sleep(1000)这种会导致界面卡死状态,所以用这个函数来代替就没有卡死的现象,但是这个函数已经用了很久,一直没出现过问题,这次不知道怎么回事一运行到这句就错,没想明白原因在哪里
蓝色光芒 2012-08-16
  • 打赏
  • 举报
回复
如果不是在线程中运行这段代码,应该是没问题的,那么问题应该出在别处,检查一下你处理消息或者事件的代码在什么位置,在Delphi中按F8,然后打开CPU查看窗口,CTRL+G,输入$004AEC03,然后往上查看,看函数或者过程名称是在那里,然后对应看源代码.
ccrun.com 2012-08-16
  • 打赏
  • 举报
回复
循环中的Sleep(1);纯属多余。
hsfzxjy 2012-08-16
  • 打赏
  • 举报
回复
那是Console程序么?

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧