void * startReciveDataThread(void * arg)
{
startSocket();
...
free(...);
printf("线程终结\n");
pthread_exit(0);
}
void socket_start(...){
//创建接收数据线程
pthread_t pt1;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_create(&pt1, &attr, &startReciveDataThread, NULL);
pthread_mutex_lock(&mutex);
socket_state(0x00);
connect = 1;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
while (connect)
{
...
receiveData(unsigned char*,int length);
}
}
void receiveData(unsigned char*,int length){
//对接收的数据进行处理
...
//处理之后界面显示做相应的变化。
//注意:界面显示的东西一定要放在主线程中进行处理,否则不能够跳出startReciveDataThread线程,用dispatch_get_main_queue切换到主线程中进行处理
dispatch_async(dispatch_get_main_queue(), ^{
[[NSNotificationCenter defaultCenter] postNotificationName:ReceiveDataNotification object:nil userInfo:userInfo];
});
}