void CClientSocket::OnReceive(int nErrorCode)
{
if(nErrorCode!=0)
{
puts("an error echoed in OnReceive");
}
else
{
puts("CClientSocket::OnReceive revoked!");
ProcessRv();
}
}int CClientSocket::ProcessRv()
{
//
// puts("CClientSocket::ProcessRv()");
int nRv;
nRv=Receive(sRvBuf,BUFSZ-1);
sRvBuf[nRv]=0;
puts(sRvBuf);
return 0;
}CEvent m_ev;
unsigned int Thread(void* param)
{
CClientSocket skClient;
ASSERT(skClient.Create());

int i;
for(i=0;i<5;i++)
{
if(!skClient.Connect("cs.nankai.edu.cn",21))
continue;
else
break;
}

if(i==5)
{
strcpy((char*)param,"can't connect to server!");
m_ev.SetEvent();
return 1;
} strcpy(skClient.sRvBuf,"USER anonymous\r\n PASS \r\n"); for(i=0;i<5;i++)
{
if( skClient.Send( (void*)skClient.sRvBuf,strlen(skClient.sRvBuf) )!=strlen(skClient.sRvBuf) )
continue;
else
break;
}
if(i==5)
{
strcpy((char*)param,"send USER/PASS failed!");
m_ev.SetEvent();
return 1;
} strcpy(skClient.sRvBuf,"RETR /eling/ModDelphiFont.rar\r\n");
for(i=0;i<5;i++)
{
if( skClient.Send( (void*)skClient.sRvBuf,strlen(skClient.sRvBuf) )!=strlen(skClient.sRvBuf) )
continue;
else
break;
}
if(i==5)
{
strcpy((char*)param,"send RETR failed!");
m_ev.SetEvent();
return 1;
}
while(1)
{
::Sleep(2000);//我的本意是让该线程休眠,以使CClientSocket::OnReceive工作,但是OnReceive偏不工作
}
return 0;
}主函数中我是这样调用的:
AfxBeginThread((AFX_THREADPROC)Thread,(void*)sThreadInfo);
::WaitForSingleObject(m_ev.m_hObject,INFINITE);
printf("Thread exit info: %s",sThreadInfo);
运行结果是WaitForSingleObject一直等待。请大家帮偶改改以使线程正常工作,谢谢