线程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];
}
答案 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];