关于ThreadEnd事件
本人用阻塞式多线程编写了一个小程序,其中线程部分如下:
void __fastcall TMyServerThread::ClientExecute(void)
{
// make sure connection is active
while (!Terminated && ClientSocket->Connected)
{
try
{
// Now, use TWinSocketStream to read or write information
// over a blocking socket connection
TWinSocketStream *pStream = new TWinSocketStream(ClientSocket, CLIENTWAITTIME);
try
{
char buffer[BUFFERSIZE];
memset( buffer, 0, sizeof(buffer) );
// give the client 60 seconds to start writing
if (pStream->WaitForData(CLIENTWAITTIME))
{
if (pStream->Read(buffer, sizeof(buffer)) == 0)
// (if can't read in 60 seconds) than close the connection
ClientSocket->Close();
else
{
// Client to Server test text
Form1->memLog->Lines->Add(AnsiString("(Client) ") +AnsiString(buffer) );
// Back again to Client
pStream->Write( buffer, sizeof(buffer));
}
// ...
// Process requests here.
// ...
}
}
__finally
{
delete pStream;
}
}
catch (...)
{
HandleException();
}
}
}
现在有个问题是:我在客户端调用Client->Close();服务器端只出发了ClientDisconnect事件,并没有出发ThreadEnd事件。
当我关闭服务器端程序时却响应了ThreadEnd事件,我在该事件中只有一行代码:memLog->Lines->Add("ThreadEnd");程序总是报地址访问违例的错误。memLog是个TMemo。