我有类似的代码:
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()执行您的处理程序.希望这可以帮助!