Q&A

  • 쓰레드와.. 이벤트..
제가 소켓을 연결하는데요.. 쓰레드를 하나 생성해서..

그 안에서 소켓을 연결 하는데..

쓰레드 밖에서 소켓을 Open하면.. OnConnect 와 같은 이벤트가 발생하는데..

쓰레드 안에서 .. 소켓을 Open하면.. OnConnect 와 같은 이벤트가 발생하지 않습니다.

물론.. 소켓을 Open 했을때.. 서버에는 붙고요.. 서버에서.. Accept 도 해 줍니다..



참고로.. 제가 쓰레드 발생하고.. 소켓 연결하는 부분입니다..

constructor TConnectThread.Create(M_Address: String; Socket: TClientSocket; Return: integer);

begin

inherited create(True);

FreeOnTerminate := True;

G_Address[i] := M_Address;

FSock := Socket;

FSock.Address := m_Address;

FSock.Port := 9999;

ReturnValue := Return;

<=========== 여기다가.. 소켓 Open 쓰면 이벤트 발생

end;



procedure TConnectThread.Execute;

begin

try

FSock.Open; <========== 요부분 소켓 연결(이벤트 발생 X)

except

end;

TErminate;

free;

end;



위에 뭔가 들린게 있다면. 지적 부탁드립니다.

2  COMMENTS
  • Profile
    권영택 2001.06.29 19:48
    아마 open 이벤트는 발생할것입니다. 다만 VCL을 이용한 사용자 인터페이스에서 처리는

    주스레드문에서만 되므로 Synchronize 메소드를 이용해서 알아봐야 하지 않을까 하네요

    Synchronize(socketopen); <--socketopen은 Fsock을 오펀하는 프로시저입니다.

    저는 이렇게 하니 되네요 ^^:



    델파초짜.. wrote:

    > 제가 소켓을 연결하는데요.. 쓰레드를 하나 생성해서..

    > 그 안에서 소켓을 연결 하는데..

    > 쓰레드 밖에서 소켓을 Open하면.. OnConnect 와 같은 이벤트가 발생하는데..

    > 쓰레드 안에서 .. 소켓을 Open하면.. OnConnect 와 같은 이벤트가 발생하지 않습니다.

    > 물론.. 소켓을 Open 했을때.. 서버에는 붙고요.. 서버에서.. Accept 도 해 줍니다..

    >

    > 참고로.. 제가 쓰레드 발생하고.. 소켓 연결하는 부분입니다..

    > constructor TConnectThread.Create(M_Address: String; Socket: TClientSocket; Return: integer);

    > begin

    > inherited create(True);

    > FreeOnTerminate := True;

    > G_Address[i] := M_Address;

    > FSock := Socket;

    > FSock.Address := m_Address;

    > FSock.Port := 9999;

    > ReturnValue := Return;

    > <=========== 여기다가.. 소켓 Open 쓰면 이벤트 발생

    > end;

    >

    > procedure TConnectThread.Execute;

    > begin

    > try

    > FSock.Open; <========== 요부분 소켓 연결(이벤트 발생 X)

    > except

    > end;

    > TErminate;

    > free;

    > end;

    >

    > 위에 뭔가 들린게 있다면. 지적 부탁드립니다.

  • Profile
    허덕궁 2001.03.07 03:33
    [Mr.덕궁이가 적었어요]

    제가 보기에는 TConnectThread를 상속 받으신거 같으신데....

    그러시담 안돼는 소스에 inherited받아야 하시는거 아닌가 싶은데요....







    > constructor TConnectThread.Create(M_Address: String; Socket: TClientSocket; Return: integer);

    > begin

    > inherited create(True);

    > FreeOnTerminate := True;

    > G_Address[i] := M_Address;

    > FSock := Socket;

    > FSock.Address := m_Address;

    > FSock.Port := 9999;

    > ReturnValue := Return;

    > <=========== 여기다가.. 소켓 Open 쓰면 이벤트 발생

    > end;

    >

    > procedure TConnectThread.Execute;

    > begin

    > try

    > FSock.Open; <========== 요부분 소켓 연결(이벤트 발생 X)

    > except

    > end;

    > TErminate;

    > free;

    > end;