阻塞函数的超时问题应该如何判断?
在Unix下,假如有阻塞函数Build_RECEIVE_ALLOCATE,如何在特定的时间没有响应,就继续往下走?我原来的想法是通过线程,在线程里调用Build_RECEIVE_ALLOCATE函数,如果一定时间里没有响应,就在主线程里调用WaitForObject来取消线程,以达到超时的目的。
但是发现这样只有第一次成功,后面的都很难成功,不知道怎么回事?还是有其他什么办法?
主要的2个函数如下:
void TRecvThread::ExecuteThread()
{
int i = 0 ;
Build_RECEIVE_ALLOCATE();
i ++ ;
cout << i << endl;
}
void TRecvThread::WaitForObject()
{
void *ret;
pthread_cancel(pt);
printf("cancel成功\n");
pthread_join(pt, &ret);
printf("join成功\n");
}