|
쓰레드 문제일 것입니다.
어딘가에서 얼핏 들으셨다는 "TClientSocket이 Thread 기반.." 이라는 것부터 의심해 봐야할것 입니다.
TClientSocket은 기본적으로 비동기(NonBlocking) 소켓입니다.
TClientSocket의 비동기 이벤트는 Window-Handle을 생성해서
메세지를 통해서 이벤트를 호출합니다.
만약 쓰레드에서 생성한다면
그 쓰레드에 메세지 Pump로직이 있어야 TClientSocket의 이벤트들이 제대로 호출될것입니다.
그럼~!
aa 님이 쓰신 글 :
: 스레드 문제 아니면 소스코드나 TClientSocket에 버그가 있는게 아닐까요?
:
:
: zzang9un 님이 쓰신 글 :
: : 요즘 버전에선 거의 안쓰지만...
: : 예전 소스에 자주 사용했던 TClientSocket을 사용하다보니
: : 이상한 현상을 발견해서 질문 드립니다.
: :
: : Client 소켓 2개를 사용해서 별도로
: : Communication이라는 클래스를 만들었습니다.
: : 여기에는 TClientSocket이 2개 들어있죠...
: :
: : 그런데....
: : MainForm에서 Communication 클래스를 직접 생성해서
: : 소켓의 Host, Port를 설정하고 Active를 true로 변경하면
: : Active 값도 변경이 잘 되고 Server 접속이 잘 되는데....
: :
: : MainForm에서 별도 생성한 Thread에서
: : Communication 클래스를 생성해서 똑같이 설정하고
: : Active를 true로 변경하면 Active 변경이 true안되고 접속도 안됩니다.
: :
: : Communication 클래스는 동일한 것을 사용했으니...
: : 차이라면... MainForm에서 생성한 경우와 Thread에서 생성한 경우인데...
: : 어떤 문제가 있는 건지 잘 모르겠습니다...
: :
: : TClientSocket이 Thread 기반으로 되어 있다고 얼핏 들은 것 같습니다...
: : 그렇더라도 다른 Thread에서 돌아가는 게 문제가 있나요??
: : 왜 MainForm에서는 잘되는데 Thread에서는 안될까요?
: : (Thread에서 Thread 생성하는 게 문제가 있는건지도 궁금하네요.. )
|