2012-06-01 129 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。