如果一个线程正在运行一个函数func1,该函数在其中调用另一个函数func2 .
然后我调用了thread.Abort()
这只会停止func1吗?
或者func1和func2以及func1调用的所有函数??
谢谢
编辑:下面是更详细的内容:
func1在一个新线程中被调用,它不断地定期调用func2 .
只有当某个数组不是null时,func2才开始执行一些工作。它完成了它并返回
当监控程序想要保存数据时,它会中止func1的线程,然后使数组为空,保存数据,然后用新的线程填充数组。并再次使用func1启动线程。
有时会引发异常,因为数组在func2中为空。因此,func1中止不影响func2。
发布于 2010-05-24 20:21:55
Thread.Abort不能保证停止线程,如果可能的话,您应该避免使用它。
调用此方法通常是终止线程。
强调我的。
它所做的是在目标线程中引发ThreadAbortException。如果捕捉到此异常,代码将继续执行,直到到达catch块的末尾,此时异常将自动重新抛出。如果您没有捕捉到它,它就类似于一个正常的异常--它在调用堆栈上传播。
假设您没有捕获异常,则该线程中运行的所有代码都将停止运行。从该线程启动的其他线程不会受到影响。
发布于 2010-05-24 20:15:50
在该线程中启动的任何内容都将被中止。
发布于 2010-05-24 21:36:15
您可能面临一个争用条件,在ThreadAbortException到达func1线程之前,但是在func2检查空数组之后,主例程会取消该数组。
至少,您的主代码和func2应该在数组周围使用一个锁。您还应该在重新启动func1线程之前测试它是否已死。就像其他人说的那样,发出停止线程的信号,而不是依赖Thread.Abort。
从您的描述中,我不能百分之百肯定func2是从func1线程中调用的,但是如果func2是在一个从func1内部启动的不同线程上运行的,那么杀死func1线程不会影响func2,因为所有线程都作为父进程的子进程存在,而不是从父进程中启动的线程。
https://stackoverflow.com/questions/2900003
复制相似问题