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语言的定时器的更多相关文章

  1. 模仿linux内核定时器代码,用python语言实现定时器

    大学无聊的时候看过linux内核的定时器,如今已经想不起来了,也不知道当时有没有看懂,如今想要模仿linux内核的定时器.用python写一个定时器,已经想不起来它的设计原理了.找了一篇blog,li ...

  2. Go语言中定时器cron的基本使用

    安装:go get github.com/robfig/cron  如果出不去就用gopm 例子: package main import ( "fmt" "github ...

  3. 08. Go 语言包(package)

    Go 语言包(package) Go 语言的源码复用建立在包(package)基础之上.Go 语言的入口 main() 函数所在的包(package)叫 main,main 包想要引用别的代码,必须同 ...

  4. golang 日期时间处理

    package main import ( "fmt" "time" ) func main() { fmt.Println(time.Now()) //显示时 ...

  5. golang:协程安全

    多路复用 Go语言中提供了一个关键字select,通过select可以监听channel上的数据流动.select的用法与switch语法类似,由select开始一个新的选择块,每个选择条件由case ...

  6. linux c语言定时器

    原文来自于:http://hi.baidu.com/opetrhsxszbckzd/item/126966cae5f9524aa9ba94f5 我只是把其重新排版标注一下. linux c语言定时器 ...

  7. Go语言学习之8 goroutine详解、定时器与单元测试

    主要内容: 1.Goroutine2. Chanel3. 单元测试 1. Goroutine Go 协程(Goroutine)(轻量级的线程,开线程没有数量限制).   (1)进程和线程 A. 进程是 ...

  8. C语言实现的多线程定时器

    目录 1. 大致功能介绍 2. API库介绍 3. 一个例子 4. 库文件源码 注意事项 1. 大致功能介绍 实现任务列表,定时器会间隔一段时间遍历列表发现要执行的任务 任务列表中的所有任务并行执行 ...

  9. 经典多级时间轮定时器(C语言版)

    经典多级时间轮定时器(C语言版) 文章目录 经典多级时间轮定时器(C语言版) 1. 序言 2. 多级时间轮实现框架 2.1 多级时间轮对象 2.2 时间轮对象 2.3 定时任务对象 2.4 双向链表 ...

随机推荐

  1. AMR无限增发代币至任意以太坊地址的漏洞利用及修复过程

    AMR无限增发代币至任意以太坊地址的漏洞利用及修复过程 0x00 项目简述 Ammbr主要目标是打造具有高度弹性且易于连接的分布式宽带接入平台,同时降低上网相关成本.Ammbr打算创建具有人工智能和智 ...

  2. URAL 1936 Roshambo(求期望)

    Description Bootstrap: Wondering how it's played? Will: It's a game of deception. But your bet inclu ...

  3. 【转】webpack4

    1.不再支持node.js4.X 2.不能用webpack命令直接打包指定的文件,只能使用webpack.config.js进行配置. 即:webpack  demo01.js  bundle01.j ...

  4. Java语言课程设计

    一.项目简介 本实验是对图形用户界面,布局管理器的综合应用,理解Java的处理机制,编写独立运行的窗口 二.项目采用技术 GUI,JAVA 三.功能需求分析 1.使用用户图形界面 2.能够实现年月份的 ...

  5. lintcode-127-拓扑排序

    127-拓扑排序 给定一个有向图,图节点的拓扑排序被定义为: 对于每条有向边A--> B,则A必须排在B之前 拓扑排序的第一个节点可以是任何在图中没有其他节点指向它的节点 找到给定图的任一拓扑排 ...

  6. SQL Server 使用分区函数实现查询优化

    在项目中遇到一个需求,需要在商家收藏信息中,获取到该商家发布的最新一条商品的发布时间,需求很简单,SQL语句也不复杂, select T_UserCollectMerchant.CollectID,T ...

  7. Spark程序

    Spark认识&环境搭建&运行第一个Spark程序 2017-07-09 17:17 by 牛仔裤的夏天, 181 阅读, 0 评论, 收藏, 编辑 摘要:Spark作为新一代大数据计 ...

  8. 我用JAVA做了个简易图像相似度计算器

    简单说两句: 笔主利用这个七夕前后两天的寂寞时光,用JAVA磨了一个简单的图像相似度计算小程序,就在刚才终于纠结完毕,输出了1.0版本,小小的满足了一下可怜的虚荣心..→_→ 使用最简单最基础的感知哈 ...

  9. 用HTML5 Canvas做一个画图板

    使用HTML5可以非常简单地在canvas上实现画图应用,用支持html5的浏览器便可在下面的区域进行绘画,要看到演示效果,请确保你的浏览器支持HTML5: 功能很简单,原理其实和拖放是类似的,主要是 ...

  10. boost 文件操作

    void testFileSystem() { boost::filesystem::path path("/test/test1"); //初始化 boost::filesyst ...