pthread_cleanup_push处理程序不适用于SIGINT(Ctrl C)

我有类似的代码:

myThread()
{
    pthread_cleanup_push(CleanupHandler , NULL)
    while (true)
    {
      /* some code here */
    }
    pthread_cleanup_pop(NULL)

 }

 static void CleanupHandler(void *arg)
 {
   printf("Cleaned\n");
 }

但是,如果我使用^ C(SIGINT)终止应用程序,则清理处理程序将无法正常工作.那是预期的吗?使CleanupHandler在^ C下工作的解决方法是什么?

解决方法:

是的,这是预料之中的,按照手册页的说明,pthread_cleanup_push()在以下三种情况下执行:

      1) When a thread is canceled
      2) thread terminates using pthread_exit()
      3) when pthread_cleanup_pop()

要解决您的问题,您可以为SIGINT注册一个信号处理程序,从该处理程序中使用pthread_exit()或pthread_cancel()执行您的处理程序.希望这可以帮助!

上一篇:namp ***测试-安装篇


下一篇:hadoop集群搭建