2009-08-18 53 views

回答

3

使用老好POSIX代碼:

#include <signal.h> 

void SigPipeHandler(int s); 

void SigPipeHandler(int s) 
{ 
    // do your handling 
} 

初始化在某些地方(main.m文件?)與

signal(SIGPIPE, SigPipeHandler); 
+0

它不起作用或我不正確使用它。 我的第二個線程正在發生此錯誤。 – Shay 2009-08-20 07:59:36

+0

你確定,你是否足夠早地安裝處理程序? – Farcaller 2009-08-20 15:01:40

1

第一個答案不起作用。 另外我想使用第二個職位的參考解決方案:

int main(int argc, char *argv[ ]) { 
    struct sigaction mySigAction; 
    mySigAction.sa_handler = SIG_IGN; 
    sigemptyset(&mySigAction.sa_mask); 
    sigaction(SIGPIPE, &mySigAction, NULL); 
    ... 
} 

但是這個代碼不工作過。有人知道這個問題的解決方案?

1

第一個答案正常。但你應該把所有的東西放在main.mm文件中。

而且在static class(Singleton),它也有效。用於測試SigPipeHandler

#import <UIKit/UIKit.h> 
#import <sys/signal.h> 
#if TARGET_IPHONE_SIMULATOR 
#endif 

void SigPipeHandler(int s) 
{ 
    NSLog(@"We Got a Pipe Single :%d____________",s); 
} 

int main(int argc, char *argv[]) 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    signal(SIGPIPE, SigPipeHandler); 
    int retVal = UIApplicationMain(argc, argv, nil, @"FullAppDelegate"); 
    [pool release]; 
    return retVal; 
} 
4

一個重要的事實:

對我來說,當調試器atached沒有奏效。所以當直接從XCode運行應用程序時,Handler不會被調用。 同時,在沒有附加調試器的設備上,處理程序按預期工作。

+0

非常感謝你張貼這個答案!我觀察到這種相同的信號行爲在調試時沒有正確處理,但在調試時處理得很好......奇怪!無論如何,這最終幫助我意識到我的應用程序實際上在處理SIGPIPE,但我真正的問題是在處理完std:exception之後拋出,但後來在我的使用'@ try'' @ catch'的目標c代碼中沒有被捕獲。而不是C'try'' catch'塊。 – Sam 2012-01-16 18:14:26

+0

我的sigpipe處理程序似乎也沒有被iOS模擬器調用。也許這只是我在xCode中進行了附加和調試,但我認爲它可能只是模擬器。 – 2015-02-06 17:34:59

相關問題