※ 引述《Harifucks (疝氣)》之銘言:
: 請問各位先進,以上是小弟的Timer程式碼,就是程式執行60秒以後,要把網路連線
: 關閉。但是假設某一些條件成立後,timer又必須重設為60秒
: 假設小弟想要重設Timer的時間:
: <1>再呼叫一次timer.schedule(timerTask, 1*60*1000);
: <2>先呼叫cancel(),再呼叫timer.schedule(timerTask, 1*60*1000);
: 都發生IllegalStateException,請問如果要重設timer的時間,
: 要怎麼做呢,請各位先進指導,謝謝。
似乎是需要再 create 一個新的 TimerTask 才可以這樣重新 schedule...
不過這樣蠻沒效率的。
看來是因為在 TimeTask 裡面有些 private member variable 記著這個 Task
曾否 schedule 過...
可以考慮一下改變形式... 在 TimerTask 中加入一個 member variable 作為
倒數的數字, 預設為 60000 (60s), 再將它用 Timer.scheduleAtFixedRate()
設成每十秒跑一次, 然後在 run() 中將那個倒數的 member variable 減十秒...
當 member variable <= 0 時就可以把 connection close 掉。
而在 checkState() function 中, if (checkState==true) 時則把 TimerTask 中
的倒數 member variable 設回 60 秒... 如此一來, 便「大致上」可將 TimerTask
reset 了
不過這個方法是沒法令每次 reset 時將它很準確地設定成 60 秒後 close
connection,只能保證在 51-59 秒之間.
--
勁過呂布的勁過相簿...
http://www.pixnet.net/superlubu
亂七八糟的,不好意思 m(_ _)m
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 147.8.130.225