Delphi 中Timer可否多线程来实现?

hq007 2007-04-23 05:17:12
我现在写了一个程序,使用了控件Timer来不断监控一台考勤机器上是否有打卡,也就是我是取这台卡机上的最后一次打卡的物理卡号,如果发现卡号改变了,证明有不同的卡在这卡机上打了卡,如果有不同的卡打卡,则在电脑上显示该卡片的相关信息。
现在的问题是如果用Timer不断监控考勤机的话,有时候会有些卡读不上来,也就是我连续打了两个不一样的卡,但只取会一个卡号。所以打算用多线程去重写这个程序,但是之前没有线程编程的经验,在此向大家请教一下,能否用多线程来实现以上的动作?
...全文
1567 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hq007 2007-04-24
  • 打赏
  • 举报
回复
楼上的方法正是我在想的方法,谢谢各位踊跃的发言!
jadeluo 2007-04-24
  • 打赏
  • 举报
回复
建议楼主写两个线程:一个负责查询(间隔时间很短),一旦发现卡号变化就把新的卡号写入缓冲区。另一个线程负责处理缓冲区中的数据。这样才比较可靠。
jadeluo 2007-04-24
  • 打赏
  • 举报
回复
两次查询的间隔时间(不管是用定时器还是用线程)应该小于连续打卡的最短间隔时间,否则会出现遗漏数据的情况。

如果每次查询之后的处理程序写得不好的话,用线程也还是会有问题的。

如果程序的主线程写得好的话,用定时器足矣。
ls_d88 2007-04-24
  • 打赏
  • 举报
回复
强烈建议使用线程
brightyang 2007-04-24
  • 打赏
  • 举报
回复
必须用thread类
zhanghua0020 2007-04-23
  • 打赏
  • 举报
回复
可以,如果是监控 建议最好还是用 线程编程
numbbb 2007-04-23
  • 打赏
  • 举报
回复
用Timer做监控轮询,犯了一大忌,此类应用必须用thread
IDWB 2007-04-23
  • 打赏
  • 举报
回复
可以用线程,而且比用时钟要好
type
TMyTread = class(TThread)
private
FCOM:string;
dz:array[0..255] of integer;
reccount:integer;
protected
procedure Execute; override;
public
constructor Create(COM:string);
end;

constructor TMyTread.Create(COM: string);
var
i:integer;
begin
FCOM:=COM;
if communit.OpenCom(Fcom,9600)<=0 then exit;
reccount:=dm.dkqlb.RecordCount;
for i:=0 to reccount-1 do
begin
dz[i]:=dm.dkqlb.fieldbyname('sbdz').AsInteger;
dm.dkqlb.next;
end;

inherited create(false);
end;

procedure TMyTread.Execute;
var
readcardno:string;
i,n:integer;
begin
SetLength(ReadCardNo,10);
while true do
begin
for i:=0 to reccount-1 do
if MDoorReadCardSn(dz[i],pchar(readcardno))=0 then
exetread.Create(readcardno,Fcom,dz[i]);
sleep(1000);
end;
if terminated then exit;
end;
zwjchina 2007-04-23
  • 打赏
  • 举报
回复
卡机应该会有缓存的。
HsWong 2007-04-23
  • 打赏
  • 举报
回复
用Delphi里的线程类就可以了。
时间间隔用Sleep()函数
northsoft_ 2007-04-23
  • 打赏
  • 举报
回复
没做过这玩意儿,不过个人觉得用Timer监控肯定不是办法,最好是触发式的,在打卡的时候才触发某个事件,另外两个卡的间隔时间肯定有个限制,也就是说在第二个卡上来之前一定要把第一个卡处理完,这个速度应该是很快的,如果你的读卡器都满足不了这个条件的话你软件再怎么改也一样
chenzhuo 2007-04-23
  • 打赏
  • 举报
回复
应该可以!

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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