2012-06-01 85 views
1

我想暂停“计时器”线程....或者我可以说要将其放入“等待”模式,然后在某些事情完成后通知。如何暂停计时器线程

Timer _catchTimer = new Timer(); CatchAppNameTimer _catchTimerTask = new CatchAppNameTimer(_catchTimer); _catchTimer.schedule(_catchTimerTask, 0, 5000);

我 “的TimerTask(_catchTimerTask)” 每次显示弹出画面....这弹出屏幕上有两个按钮 - 解锁,取消。

基本上我想,直到用户点击....其中一个解锁/取消btn,时间线程得到设置在等待模式.....当用户点击其中一个解锁/取消按钮.... ........只有在那之后时间线程才会被通知。

目前我在“timertask”的run方法中使用了一个布尔变量......来处理死锁情况......即每隔几秒调用TimerTask ...... even当已经显示弹出画面..........

如下:

public void run() { 


GlobalSingleton obj = null; 
    obj = GlobalSingleton.getInstance(); 
    if(obj.getShowDialog()) 
     return; 

    unlockField(); 
} 

当第一次 “unlockFiled()” 称为........我设置一个布尔变量为true(使用运行时存储).......这个值由getShowDialog()方法检索。而在这两个解锁/取消按钮的

fieldChanged(Field field, int context) { }方法.........我设置了布尔VAR的值设置为false ......通过调用...

GlobalSingleton obj = null; obj = GlobalSingleton.getInstance(); obj.setShowDialog(false);

但是正确的做法是“计时器任务”不应该再次启动.......直到用户按解锁/取消按钮和控制离开fieldChanged(Field field, int context) { }方法。

shuld我使用不同的线程来处理....等待 - 基于布尔变量的Timer对象的通知操作。 I HV已经尝试过这种方法,但..........不能得到解决......

我会gratefull的任何建议....

问候。

回答

0

感谢BOSS和Alexey对我们的贡献,我解决了我的问题,连续运行的线程有1秒的睡眠时间。main thread 如果u发现我的解决方案很有帮助,因为我需要对黑莓的房间开始聊天了一些声誉请投票: solution 或 -

我的解决办法是在给定的。

thnks。

0

由于我不够坚持,你有线程,听一些最平均的执行这个事件。 Mayby生产者 - 消费者模式将帮助:

1有制片人说将消息排队

2你的BlockingQueue您的邮件存储

3你有线程读取的BlockingQueue消息(如果队列是空的线程正在等待消息)并取决于它显示/隐藏你的对话框的消息。

认为这将是最简单和明确的实施。

0

用另一个Thread.And监视你的TimerTask并指定你的条件某种while循环,当它满足时只是通知你的Timetask停止Job。