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 双向链表 ...
随机推荐
- [Effective Python] 用Pythonic方式来思考
Effective Python chap.1 用Pythonic方式来思考 Pythonic: 一门语言的编程习惯是由用户来确立的. 1. 确认自己所使用的Python版本 2. 遵循PEP8风格指 ...
- 安装arch系统时,把ubuntu的efi分区格式化
导致无法从grub进入ubuntu,之后我进入win10,把ubuntu的分区都删了. 再重启,只能进入黑色的grub界面,显示 grub>> 甚至无法进入win10.只能通过在开机时按F ...
- gitbook.explore更新升级了, 不能再搜索了
www.gitbook.com/explore 不再是一个索引页面 Can I browse existing projects on GitBook ? The new version of Git ...
- HDU 4468 Spy(KMP+贪心)(2012 Asia Chengdu Regional Contest)
Description “Be subtle! Be subtle! And use your spies for every kind of business. ”― Sun Tzu“A spy w ...
- ios UI自动化测试学习笔记
一.一些注意事项: 1.做自动化测试时注意如果是真机话首先要设置不锁屏. 2.自动化测试过程中如果程序后台或崩溃了.脚本运行将会暂停,直到程序再次回到前台. 3.必须明确指定关闭自动测试,测试完成或中 ...
- 团队作业4——第一次项目冲刺(Alpha版本)-第一篇
第一次项目冲刺——第一阶段 今天我们在宿舍开了个会,每个人都斗志昂扬的.撸起袖子加油干! 分工讨论 团队成员 任务 郭达 完成博客随笔和leangoo 刘德培 设计好数据库 石浩洋 搭建好LAM ...
- 【bzoj1999】[Noip2007]Core树网的核 树的直径+双指针法+单调队列
题目描述 给出一棵树,定义一个点到一条路径的距离为这个点到这条路径上所有点的距离的最小值.求一条长度不超过s的路径,使得所有点到这条路径的距离的最大值最小. 输入 包含n行: 第1行,两个正整数n和s ...
- JSP乱码问题
在JSP中通过request对象获取请求参数时,如果遇到参数值为中文的情况,若不进行处理,获取到的参数值将是乱码.乱码情况分为以下两种: 1. 获取访问请求参数时乱码,采用如下方式解决. String ...
- [bzoj5285] [HNOI2018]寻宝游戏
Description 某大学每年都会有一次Mystery Hunt的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得这一年出题的机会. 作为新生的你,对这个活动非常感兴趣. ...
- luogu P2764 最小路径覆盖问题
题目描述 给定有向图G=(V,E).设P 是G 的一个简单路(顶点不相交)的集合.如果V 中每个顶点恰好在P 的一条路上,则称P是G 的一个路径覆盖.P 中路径可以从V 的任何一个顶点开始,长度也是任 ...