【发布时间】:2009-11-10 18:53:27
【问题描述】:
我知道没有 WINAPI 可以做到这一点,但是如果一个线程被挂起并持有一个打开的文件句柄。我们如何确定线程 ID 并在我们的进程中终止它。
我说的不是在其他进程中释放文件锁,而是在我自己的进程中。
也有可能线程在没有关闭句柄的情况下崩溃/终止。
【问题讨论】:
-
在某些情况下或每次文件处理过程中线程是否阻塞?
-
在某些情况下是这样,但是在单独的区域中我必须删除该文件,但是由于我知道它自己的进程,所以它会出现拒绝访问错误,如果我能弄清楚线程,我可以终止它或关闭句柄,甚至找出调试哪个线程以及为什么..
-
你永远不应该调用 TerminateThread,见stackoverflow.com/questions/1004676/…。
-
视情况而定。例如,如果您使用互斥锁,则所有权转移。虽然我同意它通常不安全,但我认为永远不是正确的说法。
-
@SnapConfig - 如果你能保证线程在你控制的代码中执行并且它的终止不会有副作用,你就可以安全地杀死一个线程。如果它位于库或操作系统提供的任何代码中,则无法可靠地终止它。唯一明确的安全情况是线程被创建为挂起并且尚未开始运行。
标签: c++ file winapi multithreading locking