簡體   English   中英

pthread_cleanup_push處理程序不適用於SIGINT(Ctrl C)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM