|
네트워크라는게 끊으라고 명령을 한다고 해서 바로 끊기는게 아니라 약간의 딜레이가 필요 합니다.
비정상적으로 연결이 끊겼다면 몇분씩 걸리기도 합니다.
delete 하기 전에 끊겼는지 확인하고 delete 하시기 바랍니다.
TClientSocket->Socket->Connected 값을 확인하시면 될 겁니다.
쓰레드로 돌아가는 것이라면 Close() 후에 그까이꺼 대충 Sleep(10000); 정도 주면 됩니다ㅎㅎㅎ
물소리 님이 쓰신 글 :
: 먼저 답글에 감사 드립니다..
: 당연히 소멸자에서 Close()를 호출합니다.
: 소멸자에서는 아래와 같이 Close()외에는 아무것도 수행하지 않습니다.
:
: //---------------------------------------------------------------------------
: __fastcall CNiscaNet::~CNiscaNet(void)
: {
: if(m_ClientSocket)
: {
: if(m_ClientSocket->->Active) m_ClienSocket->Close();
: delete m_ClientSocket;
:
: }
: }
: delete를 하고 곧바로 new를 하게되면 TClientSocket의 생성자를 호출 한후 깜깜 무소식 상태가
: 되더군요..OTL
:
:
: 이의영 님이 쓰신 글 :
: : 소멸자에서 바로 delete ClientSocket 하기 전에 ClientSocket->Close(); 을 먼저 호출해 보세요.
: :
: :
: : 물소리 님이 쓰신 글 :
: : : class A에서 TClientSocket을 멤버클래스로 가지고 있습니다
: : : Class A생성자에서 TClientSocket을 생성(new)하고 Calss 소멸자에서 TClientSocket을 소멸(delete)하도록
: : : 되어 있습니다.
: : :
: : : 폼에서는 Class A를 멤버로 가지고 있으면서 동적으로 생성해야만 합니다.
: : : //-- Form생성자에서 m_A에 NULL값으로 초기화 한 후
: : : A* m_A == NULL;
: : : 특정 함수에서는 다음과 같이 코딩하였습니다
: : :
: : : if(m_A) delete m_A;
: : : m_A = new A;
: : :
: : : 위의 내용은 A클래스가 이미 생성되어 있으면 delete한 후 새로이 new를 해야하는 상황입니다.
: : : 그런데 위의 내용이 실행 될때는 첫번째는 정상 작동 되는데...다시 그 함수를 수행하게 되면
: : :
: : : 다운되는 현상이 발생합니다.
: : : 추측하건데 delete ClientSocket을 실행하면 TClientSocket이 완전히 소멸된 후 리턴되는 것이 아니라
: : : Socket관련 소멸자가 쓰레드로 따로 돌면서 소멸이 되는것으로 추측됩니다.
: : : 따라서 delete m_A; 후 바로 new를 하게 되면 TClientSocket이 소멸되는 사이에 기존 포인터에 새로운
: : : ClientSocket이 생성되면서 다운 현상이 나는 것으로 추정됩니다.
: : :
: : : 따라서 ClientSocket의 소멸자가 완전히 소멸되었는지를 확인할 수 있는 방법을 알고 싶습니다.
: : : 그러면 위와 같은 문제가 해결 될것으로 생각됩니다..
: : :
: : : 고수님들의 조언 부탁드립니다.
|