GetTickCount的问题?

sz100wwb 2009-03-31 01:59:10
procedure Delay(dwMilliseconds: DWORD); // Longint
var
iStart, iStop:DWORD;
begin
iStart := GetTickCount;
repeat
iStop := GetTickCount;
Application.ProcessMessages;
until (iStop - iStart) >= dwMilliseconds;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Delay(60000);
end;

问题:有Application.ProcessMessages; 在等待的过程中,怎么还是关闭不了程序?
CPU占用很高,大概在40-50%,怎么办?
...全文
212 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
starluck 2009-03-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 Seamour 的回复:]
这个需求很奇怪,感觉你是在多应该是多线程的事
可以增加一个until的退出条件,在OnClose事件中使该条件变为True
此外,也可以在OnClose中通过调用Halt过程直接退出程序,这种方法强烈不推荐使用
[/Quote]


有可能是接受串口的時候,有時會這樣做。
microidc1415 2009-03-31
  • 打赏
  • 举报
回复
很简单 循环过程中加这样一句:
if Application.Terminated then Exit;
Seamour 2009-03-31
  • 打赏
  • 举报
回复
这个需求很奇怪,感觉你是在多应该是多线程的事
可以增加一个until的退出条件,在OnClose事件中使该条件变为True
此外,也可以在OnClose中通过调用Halt过程直接退出程序,这种方法强烈不推荐使用
starluck 2009-03-31
  • 打赏
  • 举报
回复


Application.processMessage ; 就是讓消息不要進入隊列,直接至窗口,所以才會出現這種情況。

sz100wwb 2009-03-31
  • 打赏
  • 举报
回复
没有强行退出的方法吗?请高手指点下 先谢谢了 分少再加。
Seamour 2009-03-31
  • 打赏
  • 举报
回复
你的repeat还没结束怎么退出啊
sz100wwb 2009-03-31
  • 打赏
  • 举报
回复
Application.ProcessMessages;还是没能响应程序关闭的消息!为什么?

我用的是Delphi2007
duoduo168 2009-03-31
  • 打赏
  • 举报
回复

procedure Delay(dwMilliseconds: DWORD); // Longint
var
iStart, iStop:DWORD;
begin
iStart := GetTickCount;
repeat
SleepEx(5, false);
iStop := GetTickCount;
Application.ProcessMessages;
until (iStop - iStart) >= dwMilliseconds;
end;


GetTickCount精度在15ms左右,SleepEx(5, false);完全满足。降低CPU占用率。

16,748

社区成员

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

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