在操作过程中停止工作线程



我有一个简单的UI,它有两个按钮"开始"one_answers"停止"。当用户单击"启动"时,我必须执行一个漫长的操作,因此我启动一个工作线程以保持UI响应。现在,如果用户单击"停止",我需要尽快停止操作。

  1. 实现这一点的一种方法是,工作线程函数每秒检查bool bStop=false,如果用户单击"停止",我们将从"停止"按钮处理程序中将bStop设置为true,工作线程将停止当前操作。

  2. 另一种方法是使用线程句柄终止线程。

有更好的方法吗?

您可以通过TPL查看新的Cancel功能。

http://msdn.microsoft.com/en-us/library/dd997396(v=vs.110).aspx

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

通常,作业取消要求对作业进行编程,以接受取消请求并进行适当的清理,从而避免部分故障状态。在极少数环境中,简单地终止线程是安全的(这些环境是专门为以有序的方式处理线程终止而编码的)。

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

请参阅以下关于如何在Java中做到这一点的文章:

如何优雅地停止java线程?如何在Java中正确地停止线程?http://docs.oracle.com/javase/7/docs/api/java/nio/channels/AsynchronousChannel.html

最新更新