【问题标题】:How to know if a thread is alive and then kill it?如何知道一个线程是否活着然后杀死它?
【发布时间】:2014-08-26 05:27:17
【问题描述】:

我一直在搜索和阅读有关杀死线程(C posix 线程)的信息,每个人都说这不是一个好主意,因为线程应该使其工作然后返回......但我的问题是下一个:

我正在本地网络中接收消息(使用 recvfrom 函数),但是这个函数“阻塞”了我的程序,我的意思是,如果我不修改任何消息,该函数会一直锁定(永远)直到它接收到某些东西.

为了避免这种情况,我想使用线程,所以,当我的主线程“计数”时,我的第二个线程是尝试接收消息。如果在确定的时间(即 1 秒),我的第二个线程仍在等待消息(被锁定在 recvfrom 函数中)我需要“杀死它”然后创建另一个线程重新开始(并尝试从另一个IP)。这意味着并不总是我的线程会完成它的工作,我不能永远等待......

到目前为止,我可以做到这一点(创建很多线程并从我感兴趣的 IP 接收消息),但我不知道如何杀死从未接收到任何东西的线程......

有人知道如何杀死线程吗?或者当我的主程序返回时它们被自动杀死?

谢谢你,真的很抱歉我的英语不好......

【问题讨论】:

  • 更具体地说,选择()超时。这将有助于了解您的程序做了什么,特别是为什么您要依次尝试不同的 IP 而不是并行。

标签: multithreading kill


【解决方案1】:

看起来它与我的一个问题有关 How to avoid thread waiting in the following or similar scenarios (want to make a thread wait iff its really really necessary)?

但它的 .net,不过(代码示例在 C# 中)

基本上我生成了新线程并执行了一些 i/o 操作及其阻塞调用。

由于某种原因,它只是一直等待,我确实有超时,所以我可以中止线程“中止”方法。

【讨论】:

    【解决方案2】:

    重新架构,以便线程可以接收来自任何 IP 的消息。这样,您可以尝试从另一个 IP 接收消息,而无需打扰线程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-31
      • 2012-01-21
      • 1970-01-01
      • 2011-06-28
      相关资源
      最近更新 更多