1. 首页
  2. 主题
  3. Go问与答

time.Sleep居然会失效???求原理???

elitah · · 3265 次点击
运行这个代码,https://studygolang.com/articles/8135 居然直接打印call就退出了 到底问题出在哪里??跪求高人告知 跪求高人告知 跪求高人告知 跪求高人告知 ![捕获.PNG](https://static.studygolang.com/180330/d2ddc235c81a2643f3fd7daf08552264.PNG)
第 1 条附言 ·
我没说明白,是func aaa中的sleep失效了
第 2 条附言 ·
抱歉没说明白 按逻辑,新增加goroutine来执行func aaa,主线程执行到select应该阻塞等待chan,然后CPU调度到goroutine,延时3秒,然后往chan写数据,主线程收到数据,打印call 问题就是应该是3秒后打印call,而不是立即打印
第 3 条附言 ·
抱歉了各位。是我搞错了 我不应该使用go run来测试 应该go build -o test test.go 生成二进制来测试完全没问题 ![捕获.PNG](https://static.studygolang.com/180330/bc6d28133e0308bfc4a2f7b4c79340d4.PNG)
你可以试试,看打印出什么 ```golang package main import ( "fmt" "time" ) var c = make(chan int, 1) func main() { go aaa() sec := 0 for { select { case <-c: fmt.Println("after 3 sec") return case <-time.After(time.Second): sec = sec + 1 fmt.Println(sec) } } } func aaa() { time.Sleep(time.Second * 3) c <- 1 } ```
#4
更多评论
主机是linux(ubuntu 14.04、ubuntu 16.06都试过) 系统都是386 ![捕获.PNG](https://static.studygolang.com/180330/22fdbfabaeddb84a45b13ac1fde2601b.PNG)
#1
```golang func main() { go aaa() for { select { case <-ch: //拿到锁 fmt.Println("call") case <-time.After(5 * time.Second): //超时5s fmt.Println("5 sec call") } } } ```
#2

用户登录

没有账号?注册

今日阅读排行

    加载中

一周阅读排行

    加载中