===INDY 를 사용한 none- blocking socket.
delphi 에 포함된 TClientSocket 을 사용하다가 Indy로 바꾸려고 합니다.
그런데 Indy에 포함된 TCP component 를 살펴보니 onReceive 등의 event 가없더군요. chating demo 소스를ㄹ 보아도 timer 로 0.5 초마다 socket 으로 읽는 방식을 취하더군요.
Indy 를 가지고 timer 없이 비동기 socket 을 운영하려면 어떻게해야하는지 아시는분 도움 바랍니다.
그럼 20000
==> Indy는 아시는 것처럼 Block Type Socket입니다. Block과 Non-Block사이에는 서로 이견이 많지만, 사용자 취양과 OS에 따라 선택적으로 사용하시면 됩니다. 제 생각은 왜 굳이 Block Type인 Indy로 Non-Block 처럼 사용하시나 모르겠네요 ^^; Delphi에 내장되어 있는 Socket이 마음에 않드신다면 ICS를 추천해 드립니다. Non-Block Type이면서 자체 Message Synchronizer가 있어 Block처럼 사용할 수 있으며, Indy처럼 UI 자체가 블럭되지 않는 장점이 있습니다. Non-Block에 Message-Driven을 조합해서 만들었습니다. 아주 훌륭하죠 ^^;
그래도 굳이 사용하시려면, 해결 방법은 아래 MIN님이 말씀데로 Thread로 Wrapping해야할 것입니다. Indy는 작업중에는 UI 자체도 Block되기 때문이죠.. TThread.OnTerminate()를 사용하셔서. 작업 완료를 Event로 날리시면 모양새는 비슷해지죠 ^^;
ps. 즐프 & 즐타
참고로) ICS(Internet Component Suit)은 http://overbyte.delphicenter.com/frame_index.html 요기에 있구요. 최근 SSL 작업도 하고있군요 ^^;