제가 소켓을 연결하는데요.. 쓰레드를 하나 생성해서..
그 안에서 소켓을 연결 하는데..
쓰레드 밖에서 소켓을 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;
위에 뭔가 들린게 있다면. 지적 부탁드립니다.
주스레드문에서만 되므로 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;
>
> 위에 뭔가 들린게 있다면. 지적 부탁드립니다.