我的线程程序崩溃

时间:2010-04-13 14:50:49

标签: iphone objective-c multithreading

线程objectiveC有问题。 下面的代码行包含recv阻塞等待数据的程序。 我的目的是启动一个与程序并行的线程,以便此语句不会阻止任何应用程序。 我把这个代码放在我的程序中,但是在活动时切换程序会崩溃。 输入代码。

- (IBAction为)聊天{

    if(switchChat.on){

        buttonInvio.enabled = TRUE;
        fieldInvio.enabled = TRUE;

        [NSThread detachNewThreadSelector:@selector(riceviDatiServer) toTarget:self withObject:nil];  

    }
    else {
        buttonInvio.enabled = FALSE;
        fieldInvio.enabled = FALSE;
    }

- (无效)riceviDatiServer {

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];

    int ricevuti;
    NSString *datiRicevuti;
    ricevuti = recv(temp, &datiRicevuti, datiRicevuti.length, 0);
    labelRicezione.text = [[NSString alloc] initWithFormat:@"%s.... %d", datiRicevuti, ricevuti];

    [pool   release];

}

1 个答案:

答案 0 :(得分:1)

这部分

 NSString *datiRicevuti;
 ricevuti = recv(temp, &datiRicevuti, datiRicevuti.length, 0);

显然很糟糕。 NSString*不是C缓冲区。所以你不应该把它传递给recv。您应该像{C}中那样recv数据(请参阅recv的文档)。说它现在在void*receivedData,其长度为dataLength。然后,通过

之类的内容将其转换为NSString
NSString*dataAsNSString=[[NSString alloc] initWithBytes:receivedData 
                                          length:dataLength encoding:NSISOLatin1StringEncoding];