做了个查询数据的简单系统,因为防止用户恶意查询,点住enter不动快速的点击button按钮,造成频繁查询耗费服务器资源。我初步思路是form.creat的时候,把now赋给一个Tdatetime变量lastclicktime,然后点击button后,再用 now-lastclicktime,再formatdatetime('s',now-lastclicktime) ,再将这个值转化成数值,但是这样的间隔只能精确到秒,也就是now-lastclicktime最多精确到1秒,不满足要精确到200,300,500毫秒的要求。有什么办法让2次点击的时间不得小于0.5秒吗?
button1.enable:=false;
sleep(500);
button1.enable:=true;
你mousedown 再mouseuo,再now-lastclicktime,再formatdatetime('s',now-lastclicktime)再将这个值转化成数值,这几百毫秒已经过去了
private
dwTick: DWORD;初始化一下:
procedure TForm1.FormCreate(Sender: TObject);
begin
dwTick := 0;
end;然后在按钮的点击事件中:
procedure TForm1.Button1Click(Sender: TObject);
begin
if GetTickCount - dwTick < 500 then Exit;
// 继续后续操作 // 最后
dwTick := GetTickCount;
end;
用 gettickcount 就行了. 找一个变量记录时间 每次用Gettickcount去减他
其实我的环境是在90w条记录要让专人一条条仔细查看,找出问题,有的员工就按下enter不动,一下就看过几十条,我要防止他这样,所以要设置个时间间隔