TServerSocket多线程,关闭客户端连接,程序为什么异常?
wpk 2007-12-06 03:00:38 以下程序我是按照BCB帮助中关于TServerClientThread类写的一段程序
__fastcall TSTServerClientThread::TSTServerClientThread(bool CreateSuspended, TServerClientWinSocket* ASocket,int ATimeOutMSec, TForm *pFrm)
: TServerClientThread(CreateSuspended,ASocket)
{
memset(ReceiveBuff, 0, sizeof(ReceiveBuff)); // initialize the buffer
iPos = 0;
m_pFrm = pFrm;
}
//---------------------------------------------------------------------------
void __fastcall TSTServerClientThread::ClientExecute()
{
TWinSocketStream *pStream;
// make sure connection is active
while (!Terminated && ClientSocket->Connected)
{
try
{
pStream = new TWinSocketStream(ClientSocket, 30000);
try
{
// give the client 60 seconds to start writing
if (pStream->WaitForData(3000))
{
iRead = pStream->Read(ReceiveBuff+, 512);// if can抰 read in 60 seconds
}
else
{
ClientSocket->Close(); // if client doesn抰 start, close
}
}
__finally
{
delete pStream;
}//程序执行到这里就异常了,弹出调试窗口
}
catch (Exception &E)
{
HandleException();
}
}
}
调用线程的时候语句
void __fastcall TForm1::ServerSocketGetThread(TObject *Sender,
TServerClientWinSocket *ClientSocket,
TServerClientThread *&SocketThread)
{
m_pServerSocket = new TSTServerClientThread(false, ClientSocket, 3000, this);
}
问题出当客户连接后(不发送数据的),程序自动进入了ClientExecute()函数,内部函数都处理正常,就是离开这个函数时候,系统异常,出现程序调试窗口,我想知道这是怎么回事,程序已经很简单了,几乎没有加自己的内容,这是为什么那?