当前位置: 首页 > 面试题库 >

中断睡眠goroutine?

东门楚
2023-03-14
问题内容

例如,有没有一种我可以执行的方法

time.Sleep(time.Second * 5000) //basically a long period of time

然后在需要时“唤醒”睡眠的goroutine?

我看到里面有一个Reset(d Duration)Sleep.go但是我无法调用它。有什么想法吗?


问题答案:

没有办法中断time.Sleep,但是,您可以使用time.Afterselect语句来获取所需的功能。

一个简单的例子来展示基本思想:

package main

import (
    "fmt"
    "time"
)

func main() {
    timeoutchan := make(chan bool)

    go func() {
        <-time.After(2 * time.Second)
        timeoutchan <- true
    }()

    select {
    case <-timeoutchan:
        break
    case <-time.After(10 * time.Second):
        break
    }

    fmt.Println("Hello, playground")
}

http://play.golang.org/p/7uKfItZbKG

在此示例中,我们生成了一个信令goroutine来告知main停止暂停。主要是在两个频道timeoutchan(我们的信号)和所返回的频道上等待和收听time.After。当它在这些通道中的任何一个上接收时,它将脱离选择并继续执行。



 类似资料:
  • 曾经,小法师还在魔法学院做魔法学徒的时候,经历过两次 鬼压床 第一次据现在已经四年了,当时的小法师甚至不知道这叫 “鬼压床”,只是完全不知所措,把此事定义为 “灵异事件” 让我们回到四年前,(括号中为运用《梦的解释》理论的分析): 当时小法师中午 shopping 回来,去睡了会午觉 又加上他在感冒,十分不舒服,小法师就用继续用催眠疗法 之前已经提过,小法师用此法后,就没做梦的烦恼,并且快两年了也

  • 自动睡眠 于一定时间内没有操作后,会自动进入睡眠模式以节省电力。 关 不自动进入睡眠模式 5分后 5分钟以后进入睡眠模式 10分后 10分钟以后进入睡眠模式 15分后 15分钟以后进入睡眠模式 提示 于进行以下操作时,自动睡眠机能可能会暂时失效。 连接交流电转换器时 玩游戏时 播放影像时 播放音乐时 播放幻灯片秀时 使用USB连接线与外接装置连接,启用USB模式时 聆听网上电台时* *  部份网上

  • 下面我们来看看睡眠和醒来的基本模型。假设有两个系统调用作为睡眠和唤醒。呼叫睡眠的过程将被阻止,而调用的过程将被唤醒。 有一个叫做生产者消费者问题的流行例子,它是模拟睡眠和唤醒机制的最流行的问题。 睡眠和觉醒的概念非常简单。如果关键部分不是空的,那么该过程将进入休眠状态。它将被临界区内正在执行的其他进程唤醒,以便进程可以进入临界区。 在生产者消费者问题中,让我们说有两个过程,一个过程写某事,而另一个

  • 咳咳,写岔了,这里补上 Powerful Sleep 中说过 实际情况是他们已经睡的太多了,而且精神状态和睡眠质量一样差。之所以出现这种情况是因为他们没有意识到他们体内潜在的精力和睡眠机制(Energy and sleep mechanism) 这句话点出了很久很久以前,小法师有时睡 10 个小时,醒来还是感到疲劳困倦精力不足的原因 芝士就是力量 之后小法师根据自己 Deep sleep 和 RE

  • 更新:我将键盘布局文件(gpio-keys.kl)更改为以下内容: 如图所示,我现在在Android中将音量按钮注册为POWER键,它会唤醒系统。但是,我希望任何通用 gpio 键都能唤醒系统。如上所述更改密钥布局文件的事实告诉我,也许问题出在Android端,而不是Linux内核端。不确定。也许在Android中有一些文件(策略文件等),我可以在其中为所选的gpio密钥提供唤醒功能,这与POWE

  • 我正在调用while循环内的线程Hibernate1秒。当标志为true时,循环将运行(标志为true无限时间)。在循环内,线程应Hibernate1秒,唤醒并增加计数器,检查IF条件,如果为FALSE,则应再次Hibernate1秒并继续29次。在第30次迭代中,IF条件为true,IF语句中调用的方法将收集并存储数据。最后,在第32次迭代中,第二个IF语句将把存储的数据发送到服务器,并将计数设