用pthread 创建了个线程,负责收网络数据。
pthread_attr_init(&mThreadAttr);
pthread_attr_setdetachstate(&mThreadAttr,PTHREAD_CREATE_JOINABLE);
pthread_create(&mTcpThread, &mThreadAttr, CCTcpClient::recieveThread, this);
recieveThread (){
while(true) {
。。。。
pthread_testcancel();
int retCode=that->mSocket.Recv(that->mRecvBuf+that->mRecvSize,SOCKET_BUFFER-that->mRecvSize);
pthread_testcancel();
。。。。
}
pthread_exit(NULL);
}
主线程里退出函数
close() {
pthread_cancel(mTcpThread);
pthread_join(mTcpThread,NULL);
}
目的是想让子线程结束。但因为子线程中 mSokcet.Recv()函数阻塞了。 pthread_cancel(mTcpThread).似乎无效。
主线程就卡在 pthread_join()了。
不知怎么解决这个问题。有人可以解答一下吗?谢谢。