C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[64290] Re:파일복사 쓰레드 구현에 대해서
[] 1651 읽음    2011-05-01 14:34
april 님이 쓰신 글 :
: 안녕하세요.
:
: 대학교에서 공부하고 있는 학생입니다. 학업 중간중간 생각한걸 이것저것 만들어 보고 있는데요,
:
: 제가 생각한대로 잘 안 되는 부분이 있어서 여쭤봅니다 ㅠ_ㅠ
:
:
: 제가 만들려고 하는 프로그램은 파일 복사를 하는 프로그램인데요,
:
: 여러개의 한 함수가 하나의 디렉토리를 복사하도록 구상했습니다.
:
:
bool XCopy(TCHAR *scr, TCHAR *dest);

:
: 음 근데, VCL상에서 GUI로 구현하려고 이 함수를 호출하면 파일복사가 끝날때까지 프로그램이 멈춰 버립니다.
:
: 그래서 곰곰히 생각한 결과 thread를 이용해서 구현해 보려 했지만,
:
: TThread를 상속받은 XCopy클레스를 만들어 구현해 보려 했는데 또 한가지 문제가 발생했어요.
:
:
/* do something ~ 1 */
: XCopy * xcp = new XCopy(src1, dest1);
: XCopy * xcp = new XCopy(src2, dest2);
: /* do something ~ 2 */

:
: 이렇게 하면 메인 윈도가 이벤트를 받을 수는 있는데 저 XCopy과 완전 따로놀아요 @_@;;
:
: 가장 큰 문제는 저 XCopy(src1, dest1)와 XCopy(src2, dest2)가 동시에 돌아가는 것 같습니다.
:
: 곰곰히 생각해보면 이게 당연한데 저는 XCopy(src1, dest1)이 함수가 끝날때까지 다음 명령이 기다렸으면 합니다.
:
: 물론 이벤트를 수용할 수 있는 상태로요. 이유는, 복사중에 취소할 수 있어야 하니까요,,,
:
:
: 제가 thread를 이용하는 방법이 잘못됐을까요?
:
: 아니면 thread외에 더 나은 방법이 있는지 알고싶습니다흑흑.

Cancelled 변수 하나 만들어 놓고, 취소 버튼 누르면 Cancelled=true로 설정하고
그냥 메인 스레드에서 for 또는 while 루프 돌리면서 Cancelled를 검사해서 true면 루프 탈출하면 되겠습니다.
루프 한 번 돌 때 마다 파일을 하나 복사하고 Application->ProcessMessages(); 한 번 해주구요.

별도의 스레드에서 할 때도 역시 스레드의 Execute 메서드 안에서 루프를 돌면서 위와 같이 하되 기본으로 제공되는 Terminated 변수를 검사하면 되고 메인 스레드에서 취소 버튼 누르면 해당 스레드의 Terminate() 메서드를 호출하면 되겠습니다. 물론, 한 개의 스레드 안에서 모든 파일을 처리해야겠고 메인 스레드에서는 이 스레드가 종료되기를 기다리는 코드를 작성해야 겠지요.

+ -

관련 글 리스트
64279 - april 1190 2011/04/29
64290     Re:파일복사 쓰레드 구현에 대해서 1651 2011/05/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.