如何在C语言中结束所有正在运行的线程?

4

我在程序中运行了一些线程,现在我想停止它们。请问应该怎么做?此外,我还想获取正在程序中运行的当前线程。


2
如果它们在运行,追上并杀死它们,全部杀掉。绝不手软! - Rüppell's Vulture
说真的,你能更清晰地、更详细地提出你的问题吗? - Rüppell's Vulture
1
你如何杀死什么和如何杀死?你想让程序杀死自己的线程吗?为什么不能输入Ctrl-C?kill命令怎么样?你想要什么? - wallyk
调用你的操作系统的“ExitProcess”API,不管那是什么。这将请求操作系统终止所有线程。 - Martin James
1
哪个操作系统?您使用哪些函数来创建线程?您想要向线程发出信号以终止它们,还是想要强制杀死线程?您想要获取正在程序中运行的线程吗?其中哪一个,多个线程可能并行运行!? - Werner Henze
4个回答

1
你需要找出你在哪里创建了线程,类似于 pthread_create(&pid....) pid 是线程句柄。为了杀死它们,你需要使用 pthread_kill
要检查当前正在运行的线程,可以使用 pthread_self

1
或者更好的方法是,向线程发送一条消息(例如通过管道),请求它优雅地返回。 - James M
@James,我对线程不太熟悉。你是建议使用 pthread_cancel 吗?还是指使用信号量等来指示线程结束并使用 pthread_join 等待它结束? - Suvarna Pattayil

1

这里的问题不是非常清楚。此外最好使用pthread_exit()终止线程。但如果您仍然想要杀死线程,可以使用pthread_kill(),但请检查其返回值,因为它可能会失败,在这种情况下它会返回一个错误号码,成功时返回0。而pthread_self()返回当前正在运行的线程的线程ID。如果您希望在线程处于特定状态或特定类型时取消线程,则可以使用pthread_setcancelstate()pthread_setcanceltype()。希望这能帮助您。


0

保存创建线程的句柄。 线程实现通常高度依赖于操作系统,提供更多信息。

对于Linux(您需要在创建时保存的句柄): http://man7.org/linux/man-pages/man3/pthread_kill.3.html

可能有一些方法可以枚举进程中的所有线程。但我认为这并不是必要的,只需跟踪您的线程即可。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接