在linux上,我们有pthread_kill()来执行此操作。我正试图为它找到一个Windows对应物。
换句话说,给定一个线程id,有没有办法判断该线程是否仍在运行?
GetExitCodeThread()是我发现的最接近的,但它需要线程句柄而不是线程id作为其参数。
答案 0 :(得分:6)
你不应该为此目的使用线程id:线程id可以重用,所以如果你得到一个线程id,那么该线程退出,另一个线程可以用相同的线程id启动。
句柄没有这个问题:一旦线程终止,该线程的所有句柄都将反映线程的终止状态。
您可以使用OpenThread
获取具有给定ID的线程的句柄;然后,您可以将该句柄传递给GetExitCodeThread
以确定该线程是否已退出。
答案 1 :(得分:2)
总之,不,没有。您可以确定是否存在具有给定标识符的线程。但是,您从根本上无法确定您使用给定ID引用的线程是否仍在运行。那是因为线程完成后线程ID将被回收。
要跟踪线程的生命周期,您需要获得一个线程句柄,这样您就可以根据需要保持线程处于活动状态。把它想象成一个强大的VS.弱参考的东西。您可以使用OpenThread()
获取给定ID的线程句柄。您应该在获得ID后尽快执行此操作,然后始终使用线程句柄。