[英]how to pause the timer thread
我想暫停“定時器”線程....或者我可以說想將其置於“等待”模式,然后在完成某些操作后通知。
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) { }
的兩個方法都是Unlock / Cancel按鈕.........我通過調用...將布爾變量的值設置為false。
GlobalSingleton obj = null; obj = GlobalSingleton.getInstance(); obj.setShowDialog(false);
但是正確的方法是不應再次啟動“計時器任務”。......直到用戶按下“取消阻止/取消”按鈕,並且控件退出fieldChanged(Field field, int context) { }
方法。
我應該使用differnet線程來處理.... wait-基於布爾變量來通知Timer對象上的操作...。 我已經嘗試過這種方法..........但是無法找到解決方案...
如果有任何建議,我將不勝感激。
問候。
在我不了解的情況下,您有線程正在監聽某些事件並執行此事件。 Mayby生產者-消費者模式將有助於:
1您有將消息放入隊列的生產者
2您具有存儲消息的BlockingQueue
3您具有從BlockingQueue讀取消息的線程(如果隊列為空,則線程正在等待消息),並且取決於顯示/隱藏對話框的消息。
認為這將是最簡單明了的實現。
用另一個線程監視TimerTask,並在滿足條件時指定條件while循環,只是通知您的Timetask停止作業。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.