여기에 쌓이는 파일의 갯수 및 용량이 제법 만만찮고, 이것을 반복문을 사용해 처리하다 보니, 완료되는데 몇분에서 심하면 몇십분이 걸리기도 한다.
문제는 이렇게 전송되는 도중에는 프로그램이 먹통(외부 입력을 받아들이지 않는상태) 가 되어 버려서, 사용자가 보기에는 프로그램이 다운되어 버린것처럼 보이는데다가, 괜히 사용자가 마우스로 몇번 클릭이라도 해버리면 "응답없음" 메시지창이 떠버린다.
물론 그냥 내버려 두면 알아서 작업완료한뒤 정상으로 돌아오지만, 사용자가 "프로그램 닫기" 버튼이라도 눌러 버리면, 정말 답이 없다.
요즘의 프로그램 같으면 쓰레드로 처리하면 간단할 문제지만, VB6 에선 쓰레드로 처리할 수가 없으니...
이럴때 완벽하지는 않지만, 어느정도는 보완가능한 기능이 "DoEvents" 다.
'--작업디렉토리에 쌓인 파일 체크 strDir = Dir(Config.WORKFOLDER & "\server\*." & Config.EXTENSION, vbNormal) While Not strDir = "" DoEvents '-- 파일 전송 File_Copy(Config.WORKFOLDER & strDir, trDir & strDir) strDir = Dir Wend
대충 이런 식으로 쓰는데, 이렇게 하면 왠만해서는 "응답없음" 메시지 보기가 어렵다.
뭔가 대단해 보이지만, 사실 별게 아닌게, "응답없음" 메시지는 프로그램이 작업하는데 바빠서 사용자가 프로그램에게 보낸 메시지를 제때 처리하지 못해 발생하는 것.
그러므로, 반복문 안에 "DoEvents" 를 써놓아 한번 작업이 끝날때 마다 메시지 큐를 처리해서 "응답없음" 상태가 되는것을 방지하는 것이다.
문제는 "DoEvents" 는 진짜로 단순히 메시지큐만 정리할 뿐, 다른 일은 아무것도 하지 않는다는 것. 즉, 다른 액션을 취하게 할 수는 없다는 것이다. 말하자면 어디까지나 오류방지 차원이지 멀티 태스킹의 용도는 전혀 아님.
그렇다보니, 작은 파일 여러개를 처리하는 경우라면 문제 없지만, 아주 큰 파일 1개를 옮기는 작업 같은것에선 "응답없음" 상태가 되는것을 막을수 없다.
"DoEvents" 는 뭔가 특별한 옵션 같은게 아니라, 그저 메시지 정리 명령어에 불과 하니까... 아... 좀 아쉽다... 뭐, VB6 에 너무 큰기대는 무린가...
하하... 만족할 정도는 아니지만, 이게 어디야...