有没有让main
goroutine永远睡眠的API ?
换句话说,我希望我的项目始终运行,除非停止它。
您可以使用许多永久阻塞的构造,而不会“吃掉” CPU。
例如,select
不带任何case
(且不带default
)的a:
select{}
或从没有人发送任何东西的渠道接收:
<-make(chan int)
或从nil
频道接收也会永远阻止:
<-(chan int)(nil)
或在nil
频道上发送也会永远被阻止:
(chan int)(nil) <- 0
或锁定已经锁定的sync.Mutex
:
mu := sync.Mutex{}
mu.Lock()
mu.Lock()
如果您确实想提供一种退出方法,则可以通过一个简单的渠道来完成。提供一个quit
频道,并从中接收。当您要退出时,请关闭quit
通道,因为“
关闭的通道上的接收操作始终可以立即进行,在接收到任何先前发送的值之后,将产生元素类型的零值
”。
var quit = make(chan struct{})
func main() {
// Startup code...
// Then blocking (waiting for quit signal):
<-quit
}
// And in another goroutine if you want to quit:
close(quit)
请注意,发出close(quit)
可能会随时终止您的应用。引用规范:程序执行:
程序执行首先初始化主程序包,然后调用函数
main
。当该函数调用返回时,程序退出。 它不等待其他(非main
)goroutine完成。
当close(quit)
被执行时,我们的最后一条语句main()
的功能可以继续在该装置main
够程可以返回,所以程序退出。
问题内容: 例如,有没有一种我可以执行的方法 然后在需要时“唤醒”睡眠的goroutine? 我看到里面有一个,但是我无法调用它。有什么想法吗? 问题答案: 没有办法中断,但是,您可以使用和语句来获取所需的功能。 一个简单的例子来展示基本思想: http://play.golang.org/p/7uKfItZbKG 在此示例中,我们生成了一个信令goroutine来告知main停止暂停。主要是在两
问题内容: 我有产生新线程的执行主线程。在main()的执行主线程中,我正在调用。何时获得 未处理的异常 类型? 我不确定为什么会得到这个。我以为这是因为我需要对主线程的引用,所以我继续并通过进行了引用。 这不是让线程休眠的方法吗?我需要做的是让主线程等待/睡眠/延迟,直到它再次需要工作为止。 问题答案: 您看到的是编译错误,原因是您没有正确处理检查的异常(在这种情况下)。处理意味着执行以下操作之
问题内容: 我想让系统进入睡眠或hibernate状态,这是两种不同的选择。 我将如何使用API进行此操作,我真的不想使用Process,并且这不允许我选择执行此操作所需的方法。 问题答案: 或者,如果您喜欢系统调用:
问题内容: 这会使当前的UI线程休眠吗? 问题答案: 如果要在ui线程上调用sleep,它将阻塞ui线程。不要在ui线程上调用sleep。您不应该阻止ui线程。 http://developer.android.com/reference/java/lang/Thread.html http://docs.oracle.com/javase/tutorial/essential/concurren
Heroku WORKER Dyno(在python环境中运行)在30分钟后进入睡眠状态。工作人员执行芹菜期任务计划,向用户发送电子邮件。 下面是显示实际行为的日志: 根据研究,我的理解是dyno进入睡眠状态,但是dyno不会睡眠。https://devcenter.heroku.com/articles/free-dyno-hours: 如果一个应用程序有一个免费的网络dyno,并且dyno在3
问题内容: 给出以下简单的Go程序 我想知道是否有人可以启发我 谢谢 问题答案: 由于您从不关闭通道,因此范围循环将永远不会结束。 您不能在同一频道上发送结果。一种解决方案是使用其他解决方案。 您的程序可以这样修改: