Unit1
use Unit2, Unit3
var
FilenameThread : TFilenameThread
DbUpdateThread : TDbUpdateThread
Try
for R=0 to FileListBox1.selCount -1 do
begin
{#1.스트링그리드에 불러오기 쓰레드}
FilenameThread.Create(false);
{#2.스트링그리드에 올린 데이타를 DB로 올리는 업데이트 쓰레드}
DbUpdateThread.Create(false);
end;
Finally
showmessage(intToStr(R) + ' 개의 파일을 업데이트했습니다.완료')
end;
---------------------------------------------------------------
Unit 2 {파일내용을 스트링그리드로 불러오기 쓰레드}
for i=1 to 100 do
begin
스트링그리드에 넣기
end
---------------------------------------------------------------
Unit 3 {스트링그리드에 올린 데이타를 DB로 올리는 업데이트 쓰레드}
for i=1 to StringGrid1.recordCount-1 do
begin
DB에 넣기
end
대충 소스코드는 위와 같은 구조입니다.
즉, 파일이 10개 있을때
1) 1번 파일을 불러서
2) 스트링그리드에 올리고
3) 스트링그리드에 올린 데이타를 DB에 인서트
4) 다시 2번 파일을 불러서 2),3)을 반복
이렇게 하려고 합니다.
그런데...위에 처럼 쓰레드로 구현해서 실행해보니 문제가 발생합니다.
실행해보니 실제는 1번파일부터 10번파일까지
2)단계를 계속 올리더군요. 즉 2)단계를 10번하고
그리고 3)단계를 또 10번하더군요..
제가 원하는건 1번파일을 스트링그리드에 올리고 그 데이타를 DB로 올리고
그리고 2번파일을 스트링그리드에 올리고 그 데이타를 DB로 올리고 해서
..
10번 파일까지 스트링으로 올리고 DB로 올리고
이런식으로 하려고 합니다.
그런데 실제보니까 위에서 처럼 1~10번파일을 스트링그리드에 쭉 올리고
그거 끝나면 최종적으로 스트링그리드에 올라간 데이타를 10번에 걸쳐서
DB에 올리더군요...즉 동일한 데이타를 10번 인서트하는겁니다.
그리고 쓰레드는 finally까지 모두 마치고 쓰레드를 실행하더군요...
그러니까 쓰레드가 시작도 안했는데 완료메시지를 보인후에
쓰레드가 시작하더군요...제가 델파이 한지 얼마 안된지라
책보면서 쓰레드를 적용해서 해볼려구 하는데 이런
어려움이 있네요...
고수님들의 가르침을 바랍니다.
수고하세요.
|