2014-02-23 31 views
0

我有一个简单的UI,它有两个按钮“开始”和“停止”。当用户点击“开始”时,我必须执行冗长的操作,所以我启动一个工作线程来保持UI响应。现在如果用户点击停止,我需要尽快停止操作。实现这个在操作过程中停止工作线程

  1. 一种方式是辅助线程函数检查一个布尔BSTOP =假每一秒,如果用户点击停止,我们从停止按钮处理程序中设置BSTOP为true,将工作线程停止当前操作。

  2. 另一种方法是使用其句柄杀死线程。

有没有更好的方法来做到这一点?

+0

方式二。谁知道你在循环中做什么。如果它仍然是半完成的,你会得到很多的错误。循环,我的意思是你提到的冗长的操作 – mangusta

+1

*哪个*语言/环境?确保这很容易反映在问题和标签中。 – user2864740

+0

@ user2864740,我的问题没有绑定到语言。我只想知道最有名的做法。 – Coder777

回答

0

这取决于你的环境,@ Coder777。

通常,作业取消需要将作业编程为接受取消请求并进行相应的清理以避免部分故障状态。在很少的环境中,简单地杀死线程是安全的(这些环境已经被专门编码以有序地处理线程终止)。

如果作业是非阻塞的,可以在作业中的一个或多个阶段检查标志以确定作业是否应该取消;并且,如果它被取消,优雅地终止工作,清理资源等。如果作业可以阻塞,例如在IO上,那么你需要确保该块是可中断的并且异步通知它,或者允许该块在检查取消之后定期超时并恢复其块。

见本在Java中如何完成下面的文章:不建议

How to stop a java thread gracefully? How to properly stop the Thread in Java? http://docs.oracle.com/javase/7/docs/api/java/nio/channels/AsynchronousChannel.html

+0

在S/W开发中处理这种情况的常见做法是什么?任何环境,例如C#与WinForms或WPF。我不喜欢这两种解决方案,有没有更好的方法? – Coder777