2016-10-27 2 views
0

내 스마트 폰으로 창문 덮개를 조작하고 싶습니다. 이제 때마다 내 휴대 전화에 TPOS는 0과 목표 위치입니다 (100) 사이의 정수입니다골란 : 스티어링 윈도우 덮음

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

가 호출되는 방법을 위치를 변경합니다. 현재 위치 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 초 동안 타이머가 있고 그 다음 3 초 동안 OnUpdate가 다시 호출되지 않으면 wc가 호출되기를 원합니다.

하지만 어떻게해야할지 모르겠다. 누군가 그것을 할 수있는 좋은 방법이 무엇인지 말해 줄 수 있습니까?

답변

0

귀하의 의미에 대해 확실하지는 않지만 어쨌든 시도해 보겠습니다. 무슨 전화 OnUpdate? 그거 너 전화 야? 전에으로 전화 하시려면 OnUpdate에 콜백을 걸어 wc으로 전화 하시겠습니까? 한 번 봐 제발 염두에두고

: https://play.golang.org/p/4vVpEEUcqg

나의 이해는 당신이 wc가 너무 자주 호출되지 않습니다 있는지 확인하려는 것입니다. for/select 문이 run 인 경우 wc은 최대 3 초마다 한 번만 호출됩니다.