由于中心站要接入网络才能登陆并正常使用,如果网络发生中断就要在第一时间作出反应并注销登陆的用户,以防止无效的操作产生,因此就不能单纯的依靠TCP的检测机制来实现(TCP在发送或接收时能够检测是否断开),这里用到了定时器,定义一个定时器,1500毫秒,创建一个线程每隔1秒向服务器发出保持连接消息,每次收到服务器的响应便把定时器的时间重新设置到1500毫秒,一旦定时器超时便执行注销操作来注销客户端。
定时器的用法如下:
private Timer timer;
TimerCallback timerDelegate;
timerDelegate = new TimerCallback(timeoutfun);
timer = new Timer(timerDelegate, null, 1500, 0);
这样定义的TIMER超时后只运行一次,而
重新设置定时器时间只需要
timer.change(1500,0); OK
timer = new Timer(timerDelegate, null, 0, 1500);
这样定义的TIMER每隔1500ms就运行一次,比较巧妙哦
晚上碰到诡异的bug ,经过无数次测试思考发现,是定时器惹的祸,主要是定时器在超市时刷新控件没有使用委托,而且在注销时没有废除定时器导致下一次登录时定时器不准确,记住,如果不再需要定时器时,一定要不要忘了把定时器删掉哦