自分自身をゼロにリセットするタイマーを書き込む必要があります。例えば、私はそれが満了する前に何かが起こった場合にだけ、私は同じタイマーを、新しい再ときのように、0から、タイマーはそれが持っているすべてのデータを消去し、再計算し、その後、ゴールンタイマーはゼロから再計算する
trm := time.NewTimer(10)
を持っています。
私はGoの時間APIをチェックして何も見つかりませんでした。任意のヒント?
ありがとうございました。
自分自身をゼロにリセットするタイマーを書き込む必要があります。例えば、私はそれが満了する前に何かが起こった場合にだけ、私は同じタイマーを、新しい再ときのように、0から、タイマーはそれが持っているすべてのデータを消去し、再計算し、その後、ゴールンタイマーはゼロから再計算する
trm := time.NewTimer(10)
を持っています。
私はGoの時間APIをチェックして何も見つかりませんでした。任意のヒント?
ありがとうございました。
timer.Reset
機能を使用すると、タイマーをリセットできます。それを更新するには、最初はパラメータとして使用したのと同じ継続時間を渡します。パッケージのドキュメントから
(10
あなたのケースでは):
リセット持続時間Dの後に期限が切れるようにタイマーを変更します。タイマーがアクティブだった場合はtrueを返し、タイマーが期限切れになった場合や停止した場合はfalseを返します。
したがって、同じ継続時間をReset
に渡すと、タイマーはその期間dからカウントを開始します。そして、あなたは事実上renew
タイマーです。例えば
:
if eventHappened {
timer.Reset(10)
}
Reset()が0から開始するか、タイミングを続けるかわかりません。 – fding
@fding私はあなたの懸念に対処するために、答えを更新しました。 – desaiparth
time.Reset
を使用するのはどう?
リセットは、期間dの後に期限切れになるようにタイマーを変更します。 タイマーがアクティブだった場合はtrueを返し、タイマーが期限切れになった場合はfalseを返し、 が停止した場合はfalseを返します。
別の解決策は、別のタイマーを初期化することです。
t.Reset(x)
t := time.NewTimer(x)
は、ガベージコレクションを避ける以外は同じです。
典型的な例は次のとおりです。経過時間がタイムアウトよりも小さい場合は、タイマーをリセットします。
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
const timeout = 1 * time.Millisecond
t := time.NewTimer(timeout)
for {
t2 := timeout + time.Duration(rand.Intn(100)-50)*timeout/100
start := time.Now()
select {
case <-time.After(t2):
fmt.Println("Time after:", t2)
}
elapsed := time.Since(start)
if elapsed < timeout {
fmt.Println("Time ellapsed:", elapsed)
t.Reset(timeout)
}
}
}
あなたはgo APIをチェックして何も見つからないということを意味しますか? google "golang timer"の最初の結果は、golangの時間パッケージの公式標準ライブラリドキュメントです。 'Timer'型は2つのメソッドしかありません。そのうちの1つは' Reset'です。それはまさにあなたが望むものではありませんか? –