我有以下设置:
func startsMain (){
go main ()
}
fun stopMain (){
//kill main
}
func main() {
//infinite loop
}
我正在创建黄瓜步骤,我需要能够启动和关闭该应用程序。
您可以使用select
和频道杀死无限循环!
var quit chan struct{}
func startLoop() {
quit := make(chan struct{})
go loop()
}
func stopLoop() {
// As mentioned by Kaedys
//close(quit)
// permits signalling everyone havins such a `case <-quit:`
// statement to be stopped at once, which might be even better.
quit <- struct{}{}
}
// BTW, you cannot call your function main, it is reserved
func loop() {
for {
select {
case <-quit:
return # better than break
default:
// do stuff. I'd call a function, for clarity:
do_stuff()
}
}
}
很不错的Go交换,不是吗?
现在,这有什么奇怪的地方chan struct{}
?这是一个零尺寸的频道。我们只能用空结构填充它(即:)struct{}{}
。可能是a chan bool
或其他,因为我们不使用频道的内容。重要的是,我们使用quit
通道通知goroutine中的无限循环,该该停止了。
该select
语句用于捕获来自渠道的内容。这是一条阻塞语句(case
除非您放置一条default
语句,否则它将停止执行,直到在所调查的通道之一中放入某些内容为止)。在这种情况下,每次select
执行时,如果将某些内容放入quit
或do_stuff()
将被调用,则循环将中断。如果您去过Go
Tour,
那么您已经知道这一点。
其他很酷的并发模式可以在Go Blog中找到。
最后,为了获得更多的乐趣,您可以do_stuff
使用Ticker
s 来要求您的函数在固定的时间间隔执行,而不是像这样消耗100%的CPU:
import "time"
// [...]
func loop() {
// This ticker will put something in its channel every 2s
ticker := time.NewTicker(2 * time.Second)
// If you don't stop it, the ticker will cause memory leaks
defer ticker.Stop()
for {
select {
case <-quit:
return
case <-ticker.C:
// do stuff. I'd call a function, for clarity:
do_stuff()
}
}
}
select
由于我们删除了该default
语句,因此此处处于阻塞状态。
我使用startActivity(Intent)在我的Android应用程序中创建一个新活动。 有可能扼杀其中一项活动吗?如果有,如何扼杀? 我想要这样 Activity4->Activity1->关闭应用程序
问题内容: 我在前台启动了我的程序(守护程序),然后用杀死了它,但剩下一个僵尸,无法用杀死它。如何杀死僵尸进程? 如果僵尸是一个死进程(已被杀死),我如何将其从输出中删除? 问题答案: 僵尸已经死了,所以您无法杀死它。要清理僵尸,必须等待其父级等待,因此杀死父级应该可以消除僵尸。(父对象死后,僵尸将被pid 1继承,而pid 1将等待该僵尸并清除其在进程表中的条目。)如果守护程序正在生成成为僵尸的
问题内容: 如何java.lang.Thread用Java 杀死A ? 问题答案: 有关他们为何不赞成使用Sun的内容,请参见此主题。它详细介绍了为什么这是一种不好的方法,以及通常应该采取什么措施才能安全地停止线程。 他们建议的方式是使用共享变量作为标志,要求后台线程停止。然后可以由另一个请求线程终止的对象来设置此变量。
我有一个有三个活动的应用程序。第一活动,第二活动,第三活动。 在第一个活动中有一个按钮,它启动第二个活动。在第二个活动中,有两种方法可以转到第三个活动。但是有一个方法有代码: 两个变体都使用此代码片段。 此代码在-12秒内自动运行 我的问题是:当用户按下Back键时,ThirdActivity会打开,但几秒钟后,ThirdActivity会从第一个变体再次打开。 那么,如何完全终止一个活动,使其在
每次重新启动时,在ubuntu上运行时,都会看到进程的负载 我想干掉所有这些进程(我不知道为什么它们在重新启动时运行,但它们会极大地降低我的cpu性能。) 我尝试了这里的每一个建议,停止并移除所有docker容器,但没有任何效果:进程仍在运行。 我怎么解决这个?
问题内容: 我是android的新手,我的论文就像android的“ Battery Doctor Saver”一样。我的第一个问题是选择多个应用程序并立即将其杀死。老实说,我已经遇到了第一大问题,但是我的问题是我一次只能杀死一个应用程序。因此,这是我的代码,谢谢您对我的问题的立即答复:)。 问题答案: 创建onButton,然后单击您的kill按钮。从ListView中收集所有选择的按钮及其位置