簡體   English   中英

如何在NSOperation中處理exit()

[英]How to handle exit() in NSOperation

我有一個C源代碼,希望在我的iPhone App中使用該應用程序。 我認為最好的方法是在NSOperation子類中調用該C應用程序的主要方法。

除C應用程序出現問題並調用exit() / abort()導致我的整個iPHone App崩潰的情況外,這種方法都可以正常工作。

C代碼很長,我不想經歷它或以任何方式打擾它。 我想知道是否可以繞開NSOperation中的那些exit() / abort()調用,以便它僅退出線程,而不是整個應用程序。

如何使用-Dexit = my_exit -Dabort = my_abort選項進行編譯並實現my_exit和my_abort如下所示?

void my_exit(int status)
{
    if (!/* check thread ID or so forth, and check during calling the NSOperation */) {
        exit(status);
    }
}

在您自己編譯C代碼時,您可以添加自己的exit()abort()函數,然后C代碼將調用這些函數,而不是調用庫中的那些函數。 定義它們以將適當的狀態傳遞給您的Obj-C代碼並關閉線程。

為了實現真正的隔離,您當然想使用NSTask ...

我認為在abort()之后沒有任何可行的方法可以進行操作,而exit()可能也是如此。 這兩個調用實際上都終止了進程,這意味着原始程序員可能沒有費心清理分配的資源和文件描述符等。因此,即使終止線程而不是進程,您的應用程序也幾乎肯定會像篩子一樣泄漏每當調用覆蓋的exit()/ abort()時。

更嚴重的是,如果程序調用了abort(),則它可能已檢測到其運行時間或程序員錯誤無法恢復的問題。 例如,緩沖區溢出可能破壞了堆。 因此,可能無法從這種情況中恢復過來。

恐怕您將不得不審核每次exit()abort()發生,以查看僅終止線程是否更安全。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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