[英]pthread_cleanup_push handler not working for 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()
在以下3種情況下執行:
1) When a thread is canceled
2) thread terminates using pthread_exit()
3) when pthread_cleanup_pop()
要解決您的問題,您可以為SIGINT注冊信號處理程序,從該處理程序使用pthread_exit()
或pthread_cancel()
來執行您的處理程序。 希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.