如何杀死这个帖子?

时间:2013-12-29 04:09:15

标签: c# .net

我读过的杀死线程的四种常用方法是:

  1. 如果被阻止,请使用Thread.Interrupt戳它。
  2. 轮询标志变量。
  3. 使用WaitHandle类发送信号。
  4. Thread.Abort的()
  5. 方法四解决了我的问题,但从我的理解,它是禁忌使用所以我只是想确保方法一到三不适合我。

    没有睡觉或等待所以方法不起作用。没有while循环,但有几个for循环,所以方法二不起作用。我只有一个线程没有与其他线程同步,所以方法三不起作用。因此,我使用方法四是正确的,对吧?

    我的应用程序在一个线程上执行CPU密集型算法。当用户退出GUI时,我希望计算停止。

1 个答案:

答案 0 :(得分:1)

我个人更喜欢方法2 Poll a flag variable,我不明白为什么你也不能使用它。
那么,你有几个for循环,对吗?尝试以下方法:

for(int i=0; i< data1.length && !abortFlag; i++)
{
    //Do stuff
    for(int j=0; j< data2.length && !abortFlag; j++)
    {
        //Do more stuff
        for(int k=0; k< data3.length && !abortFlag; k++)
        {
            //Do even more stuff
        }
    }

}

想要中止后,只需设置abortFlag = true;

即可

最后一件事。我认为重要的是要了解forwhile循环之间没有真正的区别。差别只是语义,你可以用两者完成相同的任务。

修改 根据@ Patrik的评论,当您为管理线程(在这种情况下为abortFlag)共享变量时,它应该被标记为volatilevolatile int i;