我的代码类似于:
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工作的解决方法是什么?
答案 0 :(得分:4)
是的,这是预期的,根据手册页,pthread_cleanup_push()
在以下3种情况下执行:
1) When a thread is canceled
2) thread terminates using pthread_exit()
3) when pthread_cleanup_pop()
要解决您的问题,您可以为SIGINT注册一个信号处理程序,从该处理程序使用pthread_exit()
或pthread_cancel()
来执行您的处理程序。希望这有帮助!