我想用智能手机操作窗帘。现在每次我改变手机位置的方法

func main() {
OnUpdate(func(tPos int) {
     wc(tPos,cPos)
     cPos = tPos
  }
}

称为tPos是0到100之间的整数,它是目标位置。当前位置cPos也有一个变量。 OnUpdate应调用一个函数,该函数根据cPos和tPos之间的顺序关系打开或关闭窗帘。此功能如下所示。
func wc(tPos int, cPos int){
    switch{
        case tPos == 0:
            log.Println("close")
        case tPos == 100:
            log.Println("open")
        case tPos > cPos:
            t := time.Duration( (tPos - cPos)*10*openTime)
            log.Println("open")
            time.Sleep( t  * time.Millisecond)
            log.Println("stop")
        case tPos < cPos:
            t := time.Duration( (cPos - tPos)*10*closeTime)
            log.Println("close")
            time.Sleep( t  * time.Millisecond)
            log.Println("stop")
    }
}

我现在的问题是应该有所延迟。我希望在调用OnUpdate之后有一个大约3秒钟的计时器,然后调用wc,除非在那3秒钟内再次调用OnUpdate。

但是我不知道该怎么做。有人可以告诉我什么是这样做的好方法吗?

最佳答案

不确定您的意思,但是我还是会尝试一下。什么叫OnUpdate?那是你的电话吗?您是否只是想在提供给wc的回调内调用OnUpdate之前入睡?

考虑到这一点,请看一下:https://play.golang.org/p/4vVpEEUcqg

我的理解是,您希望确保wc不会被频繁调用。 for中的select / run语句可确保wc最多仅每3秒调用一次。

关于go - Golang:转向窗罩,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40286492/

10-10 02:01