golang中的定时器
1. timer 定时器,时间到了执行,只执行一次
package main import (
"fmt"
"time"
) func main() {
// 1. timer基本使用
/*
timer1 := time.NewTimer(2 * time.Second)
t := time.Now()
fmt.Printf("t = %v\n", t)
t2 := <-timer1.C
fmt.Printf("t2 = %v\n", t2)
*/ // 2. 验证timer只能响应一次
/*
timer2 := time.NewTimer(time.Second)
for {
<-timer2.C // 第一次打印时间到,第二次就会死锁(原因:timer2定时器只往通道中发送一次Time数据)
fmt.Println("时间到")
}
*/ // 3. timer实现延时的功能
/*
fmt.Println("开始了", time.Now())
time.Sleep(time.Second)
fmt.Println("第一次延时:", time.Now())
timer3 := time.NewTimer(2 * time.Second)
<-timer3.C
fmt.Println("第二次延时:", time.Now())
<-time.After(3 * time.Second) // time.After() 就是对 NewTimer(d).C 的封装
fmt.Println("第三次延时:", time.Now())
*/ // 4. 停止定时器
/*
timer4 := time.NewTimer(2 * time.Second)
go func() {
<-timer4.C
fmt.Println("定时器执行了")
}()
//time.Sleep(3 * time.Second)
// 注意:如果定时器执行了,然后在调用timer4.Stop()就会返回false,如果没有执行就调用Stop()就会返回true
// 定时器一旦被关闭,从定时器通道中读取数据和后面的代码将不会在执行
b := timer4.Stop()
if b {
fmt.Println("timer4已经关闭")
}
for { }
*/ // 5. 重置定时器
fmt.Println(time.Now())
timer6 := time.NewTimer(3 * time.Second)
timer6.Reset(time.Second)
fmt.Println(<-timer6.C) }
2. Ticker:时间到了,多次执行
package main import (
"fmt"
"sync"
"time"
) var wg sync.WaitGroup func main() {
// 2. ticker 定时器,时间到了多次执行
ticker := time.NewTicker(1 * time.Second)
wg.Add(1)
go func() {
i := 1
for {
fmt.Println(<-ticker.C)
if i == 5 {
ticker.Stop()
break
}
i++
}
wg.Done()
fmt.Println("子 goroutine结束了")
}() wg.Wait()
fmt.Println("主 goroutine 结束了...") }
golang中的定时器的更多相关文章
- golang 中的定时器(timer),更巧妙的处理timeout
今天看到kite项目中的一段代码,发现挺有意思的. // generateToken returns a JWT token string. Please see the URL for detail ...
- golang中的race检测
golang中的race检测 由于golang中的go是非常方便的,加上函数又非常容易隐藏go. 所以很多时候,当我们写出一个程序的时候,我们并不知道这个程序在并发情况下会不会出现什么问题. 所以在本 ...
- 浅谈JavaScript中的定时器
引言 使用setTimeout()和setInterval()创建的定时器可以实现很多有意思的功能.很多人认为定时器是一个单独的线程(之前我也是),但是JavaScript是运行在单线程环境中的,而定 ...
- 第十四篇:在SOUI中使用定时器
前言 定时器是win32编程中常用的制作动画效果的手段.在Win32编程中,可以使用::SetTimer来创建定时器,定时器消息会被会发到调用SetTimer时指定的HWND. 在SOUI中一般来说只 ...
- 基础知识 - Golang 中的正则表达式
------------------------------------------------------------ Golang中的正则表达式 ------------------------- ...
- cocos2dx中的定时器及其分类
cocos2dx中的定时器分三大类: 1.帧循环定时器 2.一次性定时器 3.自定义定时器 一.帧循环定时器,顾名思义,每一帧都会执行一次,用于实时性要求比较高的场合,如碰撞检测 void sched ...
- C++控制台程序中使用定时器
转自博客:http://www.cnblogs.com/phinecos/archive/2008/03/08/1096691.html 作者:洞庭散人 “我现在项目是一个控制台程序,用到的Win32 ...
- 在Android开发中,定时器一般有以下3种实现方法
在Android开发中,定时器一般有以下3种实现方法: 原文地址http://www.360doc.com/content/12/0619/13/87000_219180978.shtml 一.采用H ...
- Qt中使用定时器(可使用QObject::timerEvent定时执行,QTimer::singleShot可只触发一次)
在Qt中使用定时器有两种方法,一种是使用QObiect类的定时器:一种是使用QTimer类.定时器的精确性依赖于操作系统和硬件,大多数平台支持20ms的精确度 1.QObject类的定时器 QObje ...
随机推荐
- 将本地的react项目代码打包到服务器
打包过程 连接服务器 ssh root@xx.xx.xx.xx(服务器IP) 定位到当前项目目录 cd /path/projectName 更新代码到服务器 git pull 执行打包命令(这里我创建 ...
- 【LeetCode】1118. Number of Days in a Month 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 判断是否是闰年 日期 题目地址:https://lee ...
- RASP Runtime Application Self-protection 运行时应用自我保护 介绍及优缺点
RASP 介绍 Runtime Application Self-protection 运行时应用自我保护 [图源:绿盟科技] 概念 Gartner (著名信息技术研究和分析厂商) 在2014年提出了 ...
- 【因果推断经典论文】Direct and Indirect Effects - Judea Pearl
Direct and Indirect Effects Author: Judea Pearl UAI 2001 加州大学洛杉矶分校 论文链接:https://dl.acm.org/doi/pdf/1 ...
- [数学]高数部分-Part III 中值定理与一元微分学应用
Part III 中值定理与一元微分学应用 回到总目录 Part III 中值定理与一元微分学应用 1. 中值定理 费马定理 罗尔定理 拉格朗日中值定理 柯西中值定理 柯西.拉格朗日.罗尔三者间的关系 ...
- 云南农业职业技术学院 - 互联网技术学院 - 美和易思《MYSQL 高级查询与编程》 综合机试试卷
数据库及试题文档下载:https://download.csdn.net/download/weixin_44893902/14503097 目录 题目:电商平台 mysql 数据库系统管理 一. 语 ...
- C#WPF数据绑定模板化操作四步走
前言:WPF数据绑定对于WPF应用程序来说尤为重要,本文将讲述使用MVVM模式进行数据绑定的四步走用法: 具体实例代码如下: 以下代码仅供参考,如有问题请在评论区留言,谢谢 1 第一步:声明一个类用来 ...
- Zabbix 代码执行漏洞复现 /zabbix-cve_2017_2824
环境: 利用docker将vulfocus环境pull到本地搭建 漏洞描述: Zabbix 是由Alexei Vladishev 开发的一种网络监视.管理系统,基于 Server-Client 架构. ...
- git下载
git快速下载地址:https://github.com/waylau/git-for-win
- CSS基础-4 定位
CSS定位和浮动 css定位:改变页面的位置 定位机制有以下三种 普通流 浮动 绝对布局 定位的属性: position:把元素放在一个静态的.相对的.绝对的.或固定的位置中 top ...