|
m_pClientSocket = new TClientSocket(this);
TClientSocket(this) 여기에서 this를 NULL로 바꿔보시기 바랍니다.
단, 테스트만 해보고 정상동작이 확인되면 뒤에서 수동으로 delete해줘야 함은 당근이죠.
그리고 웬만하면 thread에서 이벤트 호출할 때는 Synchronize() 함수를 써서 호출하시기 바랍니다.
그렇지 않을 경우 multi-threaded code에서 대부분 아주 복잡한 문제가 발생합니다.
바보 님이 쓰신 글 :
: 죄송합니다..
:
: 문제가 뭔지 저도 잘몰라서...
:
: (Tcp/ip) 컴퍼넌트을 만들었습니다 (강 서버 컴퍼넌트 위에.. 스레드하고 링크드 리스트
:
: 넣어서 만들었습니다.)
:
: 이 컴퍼넌트 안에 스레드가 돌아 감니다.(링크드 리스드에 자료가 있으면 위에 이벤들 전달함)
:
: 스레드에서 이벤트가 발생합나다.(링크드 리스트이 자료 받으라고)
:
: 이벤트 선연
: typedef void __fastcall (__closure *TReceiveEvent)(AnsiString &Data);
:
: while (!Terminated)
: {
: if(SocketObj->ReceiveData)
: {
:
: ReceiveData = AnsiString(SocketObj->ReadPacket());
: SocketObj->OnClientRead(ReceiveData);
: }
: else
: {
: Suspend();
: }
:
: }
: - 스레드 로직-
:
:
: 그럼 본 프로그램에서 이 이벤트을 같고 처리할때 문제가 발생함니다.
:
: 이벤트에서 게체을 셍성함니다 물론
:
: m_pClientSocket = new TClientSocket(this);
: m_pClientSocket->Port = iPort;
: m_pClientSocket->Host = sHost;
: m_pClientSocket->OnConnect = Connect;
: m_pClientSocket->OnError = MyError;
: m_pClientSocket->Active = true;
:
: 이렇게 클라이언트 소켓을 만들어서 다시 데이터를 발송합니다...
:
: 근대 반응이 없군요 ..
:
: 그래서 이것 저것 해보니..
:
: 이 이벤트에서 다른 게체을 만들어서 데스트 해보니
:
: 일반 이벤트에 반든거 하고 다르더군요..
:
: 이 이벤트에서 edit 박스 만드들어서 사용해 보니 게체가 생성된것 같은데..반응이 없어요
: 마치 다운 된것 같아요.. 이넘만.
: 아마 이벤트 발생한 것이 처리가 안되서 그런것 같구요 (그래픽 쪽 )
:
: 아무턴 이벤트에서 생성한 게체들이 왜 반응하지 못하고 죽어 버릴까 (자살하나)
:
: 전에는 스레드가 없이 그냥 소겟에서 자료 날라오면 위로 올렸는데 ..
:
: 그 때는 잘됬거덩요..
:
: 이런거 아시는분
:
: 기술적으로 졸라 이상한 것이라서 이런거 물어 볼때 마다 미안함
:
: 왜 항상 이상한 질문만 할까..ㅋㅋ..
:
:
:
:
:
:
:
:
:
:
|