Q&A

  • 큰 파일 전송시 완료될때까지 응답없음으로 나오는 이유는 뭘까요.
버튼을 누르면 하드에서 50메가정도의 txt파일을 적당한 간격으로 잘라낸후
db에 저장하는 프로그램을 짰습니다.
(데이터 CD를 그런식으로 보내주었더군요 =_=;;)
덕분에 일일히 각라인별로 규칙적으로 잘라서 db에 넣어주어야 합니다만..
데이터 전송은 잘되긴합니다만...
이 프로그램을 돌리면 '응답없음'상태가 되어버리더군요
온 클릭이벤트에 잘라서 작업하는걸 전부 넣어버렸거든요...

그리고 얼마전에 FTP에서 데이터를 전송하는 프로그램을 짰습니다..
클릭을 하면 접속을 해서 다운을 받아라. 라는 단순한 구조이긴 합니다만.
클릭 이후 다운완료 시점까지 역시 응답을 안하더군요...

첫번째 경우같이 읽는 이벤트 하나하나가 짧을경우엔..
Application.ProcessMessages;
로 처리해도 되는듯 합니다만..

2번째처럼 FTP다운같은건 완전 통짜 이벤트인듯 해서요...

이렇게 각 이벤트가 완료될때까지 프로그램이 응답을안해버립니다..
어떻게 해결할수 있을까요... 죄송하지만 조언좀 부탁드리겠습니다..

아래는 FTP 다운받는 구문이라고 만든부분입니다 ^^;;
초보라 좀 무식하게 짠감이 있긴 합니다만 =_=;;
----------------------------------------------
    idftp1.Host:=주소;
    idftp1.User:=아이디;
    idftp1.Password:=암호;
    idftp1.Port:=포트;

    try
        idftp1.Connect(true);
         Application.ProcessMessages;
        idftp1.TransferType:=ftBinary;
        idftp1.ChangeDir('upload');
         Application.ProcessMessages;
        idftp1.Get('03_BABYLON_VERSES_OF_ANGEL.mp3','c:tempkel.mp3',true);

    except
        showmessage('연결에 실패했습니다');
    end;
3  COMMENTS
  • Profile
    우영범 2003.04.17 05:20
    윈도우에서는 기본적으로 넌블록킹을 이용하지만 indy는 블록킹을
    이용하기 때문에 작업이 끝날 때까지 블록됩니다. 이러한 문제점
    때문에 AntiFreeze라는 컴퍼넌트가 있습니다. 이 컴퍼넌트를 이용해도
    될 것 같고요, 그리고 idFTP 컴퍼넌트의 이벤트에 보시면 onWork라는
    이벤트가 있습니다. 이 이벤트를 이용하면 얼마만큼 송수신하고 있는가를
    알 수 있습니다. 여기에 Application.ProcessMessagees 구문을 넣어
    줘도 됩니다. 아나면 전송 상황을 보여주든가요...



  • Profile
    최용일 2003.04.16 19:23
    안녕하세요. 최용일입니다.

    idftp1.Get이 윈도우가 다른 메세지를 처리하도록 하지 않으니까 그런거구요...

    이런거는 쓰레드로 돌리시면 해결되실 겁니다...

    ^^ 항상 즐코하세요...

  • Profile
    이지우 2003.04.16 21:11
    쓰레드란걸 한번 공부해 봐야겠군요 ^_^
    조언 감사드립니다!! ^^/