Я использую потоки в c ++ visualstudio2008, когда моя форма закрывается, поток все еще остается активным, поэтому я попробовал thread :: abort, когда форма закрывается, но после вызова потока все еще жив. поэтому я помещаю обработчик исключения в поток, и когда исключение прерывания прибывает, выход потока, но поток не входит в обработчик исключения.
как я могу закрыть свою ветку?
oThread - глобальный объект Thread.
private: void ThreadMethod(/*Object^ state*/)
{
try{
SOCKET server;
WSADATA wsaData;
sockaddr_in local;
int wsaret=WSAStartup(0x101,&wsaData);
if(wsaret!=0)
{
return;
}
local.sin_family=AF_INET;
local.sin_addr.S_un.S_addr=INADDR_ANY;
local.sin_port=htons((u_short)20248);
server=socket(AF_INET,SOCK_STREAM,0);
if(server==INVALID_SOCKET)
{
return;
}
if(bind(server,(sockaddr*)&local,sizeof(local))!=0)
{
return;
}
if(listen(server,10)!=0)
{
return;
}
SOCKET client;
sockaddr_in from;
int fromlen=sizeof(from);
int buffer;
char buff;
//this->Invoke(gcnew MethodInvoker(this, &Form1::UpdateButton));
while(!stop)
{
client=accept(server,(struct sockaddr*)&from,&fromlen);
//con la struct
int numByte=recv(client,(char*) &mystruct, (int) sizeof(mystruct), 0);
this->Invoke(gcnew MethodInvoker(this, &Form1::UpdateButton));
MessageBox::Show(mystruct.num.ToString());
closesocket(client);
}
closesocket(server);
WSACleanup();
}
catch (ThreadAbortException^ e)
{
ExitThread(0);
}
ExitThread(0);
}
private: System::Void Form1_FormClosing(System::Object^ sender, System::Windows::Forms::FormClosingEventArgs^ e) {
oThread->Abort();
if(oThread->IsAlive)
{
MessageBox::Show("ok");
}
}
};
}