有没有办法同时结束线程?

Posted

技术标签:

【中文标题】有没有办法同时结束线程?【英文标题】:Is there any way to end threads simultaneously? 【发布时间】:2020-05-09 15:34:55 【问题描述】:

我有一个程序(在 c++ WIN32 和 VisualStudio19 中),其中我有几个线程具有相同的句柄。 有这样的想法:

father

    while(true)
        HANDLE son=createThread...



son

    //The son may be waiting in a semaphore


有没有办法同时结束线程的“生命”?就像在 UNIX 中使用 sigterm 或 sigkill 一样。 线程可能在信号量中等待

【问题讨论】:

我认为这是不可能的,你必须自己实现。将所有句柄保存在一个容器中并调用TerminateThread 这是一个大学项目,我们不能使用 TerminateThread “其中我有几个线程具有相同的句柄” - 听起来很糟糕。如果线程都共享相同的标识符,你如何区分它们? 对子线程进行编程的“正确”方法是让它们偶尔检查“终止事件”,并在它们应该存在时让父亲发出信号。 如果没有额外的上下文,您的问题毫无意义。 【参考方案1】:

通常在 Windows 上,如果您无法避免这种需要,您将运行所有线程以终止到一个单独的进程,然后终止该进程 - 无论它是一个线程还是多个线程。

【讨论】:

以上是关于有没有办法同时结束线程?的主要内容,如果未能解决你的问题,请参考以下文章

线程池工具类实现结束指定线程

一般来说,主方法main()结束的时候线程结束

java线程池5个线程同时运行 有一个线程等待数秒无法继续运行被结束掉,而其他4个线程不受那个线程的影响

delphi 的多线程问题

父线程 在创建了子线程后,是否继续执行自己的代码?它可以在子线程结束前 结束吗?

核心java多线程 - 线程没有结束[重复]