go语言的定时器
package main import ( "fmt" "time" ) func main(){ //创建一个定时器,时间为2s,2s过后会自动往通道里面写入数据 //数据只会写一次 timer := time.NewTimer(2 * time.Second) fmt.Println("当前时间", time.Now())//当前时间 2018-09-11 21:47:46.1274704 +0800 CST m=+0.001994901 //2s后,timer.C里面会有数据可以读 t := <-timer.C//没有数据前会阻塞 fmt.Println("现在时间",t)//现在时间 2018-09-11 21:47:48.1280881 +0800 CST m=+2.002612601 }
package main import ( "fmt" "time" ) //实现延时功能 func main(){ //1.延时两秒钟打印一句话 timer:= time.NewTimer(time.Second * 2) fmt.Println("------")//注意这里是不会卡住的,time.Newtimer()执行完是不会等待的,会直接往下走 <- timer.C //这里是会卡住,因为必须要等两秒后,timer.C里面有数据才行 fmt.Println("------") //2.延时两秒钟打印一句话 time.Sleep(time.Second * 2) fmt.Println("------") //3.延时两秒钟打印一句话 //注意:NewTimer会有一个返回值(timer),数据写在了timer.C里面,我们需要往timer.C里面读取数据 //但是After本身就直接返回一个通道,两秒后往通道里面写数据,所以我们直接从After这里读取数据即可 //先是没有数据,然后等两秒后,数据写入,就可以读了 <- time.After(time.Second * 2) fmt.Println("------") }
package main import ( "fmt" "time" ) //定时器停止 func main(){ //3s后,time.C里面会有数据可以读 timer:=time.NewTimer(time.Second * 3) //注意这里是不会阻塞的,当遇见time.C才会阻塞 go func() { <-timer.C fmt.Println("子协程可以打印了") }() timer.Stop()//当我停止了定时器,子协程里面变无法再往下执行了,所以是不会有打印结果的 //让主协程不停下 for{ } }
package main import ( "fmt" "time" ) //定时器重置 func main(){ //3s后,time.C里面会有数据可以读 timer:=time.NewTimer(time.Second * 3) //这里我重置定时器,那么上面的3s便无效了,因此会在一秒钟之后打印 timer.Reset(time.Second * 1) <- timer.C fmt.Println("时间到") }
package main import ( "fmt" "time" ) //ticker的使用 func main(){ //和timer不一样,ticker是周期性的循环,像闹钟一样 ticker:=time.NewTicker(time.Second * 1) i:=0 for { <-ticker.C i++ fmt.Println("i=",i) if i==9{ break } } } /* i= 1 i= 2 i= 3 i= 4 i= 5 i= 6 i= 7 i= 8 i= 9 */
go语言的定时器的更多相关文章
- 模仿linux内核定时器代码,用python语言实现定时器
大学无聊的时候看过linux内核的定时器,如今已经想不起来了,也不知道当时有没有看懂,如今想要模仿linux内核的定时器.用python写一个定时器,已经想不起来它的设计原理了.找了一篇blog,li ...
- Go语言中定时器cron的基本使用
安装:go get github.com/robfig/cron 如果出不去就用gopm 例子: package main import ( "fmt" "github ...
- 08. Go 语言包(package)
Go 语言包(package) Go 语言的源码复用建立在包(package)基础之上.Go 语言的入口 main() 函数所在的包(package)叫 main,main 包想要引用别的代码,必须同 ...
- golang 日期时间处理
package main import ( "fmt" "time" ) func main() { fmt.Println(time.Now()) //显示时 ...
- golang:协程安全
多路复用 Go语言中提供了一个关键字select,通过select可以监听channel上的数据流动.select的用法与switch语法类似,由select开始一个新的选择块,每个选择条件由case ...
- linux c语言定时器
原文来自于:http://hi.baidu.com/opetrhsxszbckzd/item/126966cae5f9524aa9ba94f5 我只是把其重新排版标注一下. linux c语言定时器 ...
- Go语言学习之8 goroutine详解、定时器与单元测试
主要内容: 1.Goroutine2. Chanel3. 单元测试 1. Goroutine Go 协程(Goroutine)(轻量级的线程,开线程没有数量限制). (1)进程和线程 A. 进程是 ...
- C语言实现的多线程定时器
目录 1. 大致功能介绍 2. API库介绍 3. 一个例子 4. 库文件源码 注意事项 1. 大致功能介绍 实现任务列表,定时器会间隔一段时间遍历列表发现要执行的任务 任务列表中的所有任务并行执行 ...
- 经典多级时间轮定时器(C语言版)
经典多级时间轮定时器(C语言版) 文章目录 经典多级时间轮定时器(C语言版) 1. 序言 2. 多级时间轮实现框架 2.1 多级时间轮对象 2.2 时间轮对象 2.3 定时任务对象 2.4 双向链表 ...
随机推荐
- LeetCode 36——有效的数独
1. 题目 2. 解答 将数独中数字的 ASCII 码值转化到 0-8 之间作为散列值,建立一个散列表,然后分别逐行.逐列.逐宫(3*3小块)统计每个数字的出现次数,若出现次数大于 1,则数独无效. ...
- erc20代币合约
看这篇文章需要对以太坊,智能合约,代币等概念有基本的了解. 什么是ERC20 可以把ERC20简单理解成以太坊上的一个代币协议,所有基于以太坊开发的代币合约都遵守这个协议.遵守这些协议的代币我们可以认 ...
- 山科 STUST OJ Problem B: 编写函数:String to Double (II) (Append Code)
这道题没啥别的毛病,我的错误在于看不懂题. 另外还有一点是注意浮点数存在-0 #include <stdio.h> #include <ctype.h> #include &l ...
- 查看ClassLoader载入了哪些类?
在执行jar时加上-verbose:class java -verbose:class -Xms1G -Xmx2G -jar xx.jar 必要时还可以使用 >log.txt 将输出输入到文本 ...
- Spring Boot学习(二):配置文件
目录 前言 方式1:通过配置绑定对象的方式 方式2:@Value("${blog.author}")的形式获取属性值 相关说明 注解@Value的说明 参考 前言 Spring B ...
- 【PHP】- session_cache_limiter(private,must-revalidate)是什么意思
session_cache_limiter(private,must-revalidate)是什么意思 表义一: 指定会话页面所使用的缓冲控制方法: 当session_cache_limiter('p ...
- Java循环控制语句-switch
Java循环控制语句之一switch 不同于其他循环控制语句的特性: switch的英文解释为开关,正如它的解释一样,switch循环的特点就像开关一样,跳到哪一个条件即会出现某一种结果. 写法: s ...
- Educational Codeforces Round 53 Div. 2翻车记
A:差点开场懵逼.只要有相邻两位不同就可以作为答案. #include<iostream> #include<cstdio> #include<cmath> #in ...
- P3509 [POI2010]ZAB-Frog
题目描述 On the bed of one particularly long and straight Byteotian brook there lie rocks jutting above ...
- POJ 3693 Maximum repetition substring(最多重复次数的子串)
Maximum repetition substring Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10461 Ac ...