1

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

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

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

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

目前我在“timertask”的运行方法中使用一个布尔变量......来处理死锁情况......即每隔几秒调用一次TimerTask......即使已经弹出屏幕显示…………

如下 :

public void run() { 


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

   unlockField();
}

当第一次调用“unlockFiled()”时......我将一个布尔变量设置为 true(使用运行时存储)......该值由 getShowDialog() 方法检索。并且在

fieldChanged(Field field, int context) { }解锁/取消按钮的方法............我将布尔变量的值设置为false......通过调用......

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

但是正确的方法是“计时器任务”不应该再次启动......直到用户按下取消阻止/取消按钮并且控制退出该fieldChanged(Field field, int context) { }方法。

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

我将不胜感激任何建议....

问候。

4

3 回答 3

0

正如我所不明白的那样,你有一个线程正在监听一些事件并执行这些事件。Mayby 生产者-消费者模式将有助于:

1 您有将消息放入队列的生产者

2 你有 BlockingQueue 存储你的消息

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

认为这将是最简单和清晰的实现。

于 2012-06-01T12:09:44.423 回答
0

使用另一个线程监视您的 TimerTask。并在满足时指定某种 while 循环的条件,只需通知您的 Timetask 停止作业。

于 2012-06-01T12:22:19.663 回答
0

感谢 BOSS 和 Alexey 的贡献,我已经解决了我的问题,一个连续运行的线程休眠了 1 秒。

我的解决方案在 - 解决方案 或:主线程上给出 如果您发现我的解决方案有帮助,请投票,因为我需要一些声誉才能开始在黑莓房间聊天。

谢谢。

于 2012-06-15T08:50:03.110 回答