【问题标题】:Method of checking whether a thread returned or not?检查线程是否返回的方法?
【发布时间】:2013-07-23 06:41:44
【问题描述】:

我的主程序(所有 c 代码)将服务器函数作为单独的线程 (pthread_create) 启动。 这个函数等待传入的输入并用它做一些事情。同时主程序也在继续做事(主程序不会等待服务器函数完成它的工作才继续)。

现在服务器功能有可能发生错误(套接字问题,...)。然后服务器函数返回一个特定值(例如“-1”)。 如果是这种情况,我想中止整个程序的执行。

我该如何处理?

我唯一的想法是启动第二个线程,不断验证服务器线程在发生错误时更改的全局变量。然后第二个线程处理程序中止。

我还有什么其他选择?

亲切的问候

【问题讨论】:

  • 你能提供一些代码吗?
  • 看到这可能会有所帮助stackoverflow.com/questions/2156353/…
  • 为什么服务器线程不能中止程序本身?
  • 是的 - 就像@jlx 所说,只需从检测到严重错误的线程中调用您的“TerminateProcess”API,或者在您的操作系统上调用任何它。
  • 我的主程序是用 Fortran 编写的。在某些时候,它会调用一个启动服务器的 c 函数(通过 iso_c_binding 耦合)。我想最好的解决方案真的是在我调用的 Fortran 主程序中编写一些程序退出函数,以防服务器函数出现错误(感谢 jxh 和 Martin James)。我知道提供一些伪代码总是更好,但我认为这在这里并没有多大意义。至少我不知道该发布什么。

标签: c multithreading pthreads status


【解决方案1】:

您可以使用 pthread_join 来等待父线程中的子线程终止。 或者 pthread_cond_wait 来实现类似的东西。

【讨论】:

  • 你好 vinayak,我认为这不起作用,因为我不希望父线程等待子线程。我只是希望它停止,以防子线程出现错误。
  • @user2504694 然后只要遇到错误就从调用子线程的函数返回。
猜你喜欢
  • 2012-02-10
  • 2018-09-29
  • 2014-04-24
  • 2020-04-15
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
  • 2011-03-13
  • 1970-01-01
相关资源
最近更新 更多