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
[19746] Re:파일저장 쓰레드 및 파일 전송 쓰레드에서 이밴트 처리
유영인.Chris [cuperido] 1930 읽음    2002-07-02 15:23
메세지는 후킹으로 받을 수 있는 부분을 만들어 놓으시면 될 것 같습니다. PostMessage는 그렇지 않지만, SendMessage 경우에는 메세지를 정상적으로 받기 전까지는 보낸 컴퓨터로 응답이 가지 않습니다. 그렇기 때문에, 받은 메세지가 무시되어 버리는 일은 걱정하시지 않으셔도 될 것 같습니다.

그리고, FTP는 Indy의 FTP를 사용하시기 바랍니다. 훨씬 빠르고 에러율이 적습니다 IdAntiFreeze와 쓰시면, 멈춤 현상을 제거할 수 있습니다. FTP의 OnWork 에서 파일이 전송될때마다 주기적으로 ProcessMessages 를 해주시고, 파일을 저장할때도 ProcessMessages를 해주셔야 할 것 같습니다.

생각만으로 말씀드려서 또 다른 문제가 생길지 모르겠네요. 원래 이런 문제들은 어렵잖아요.. -_-a


아더 님이 쓰신 글 :
: 안녕하세요. 프로그램을 작성하다가 막히는 부분이 있어
: 글을 올립니다. 프로그램이 하는 일은 다음과 같습니다.
:
: * 주 프로그램과 2개의 쓰레드로 구성
:
: 1. 주 프로그램:
:    ㅁ. 사운드 카드에서의 입력을 받아 버버에 저장 후
:        버퍼가 다차면 메시지 발생    
:    ㅁ. 버퍼가 다찯다는 메시지가 오면 버버내용을 환형 큐에 옮긴 후
:        버퍼를 스위칭 (더블 버퍼링 사용)
:        이때 파일 저장 쓰레드가 없으면 파일저장 쓰레드 생성
: 2. 쓰레드 1
:    ㅁ. 환형 큐에 데이터가 있으면 데이터를 파일로 저장
: 3. 쓰레드 2
:    ㅁ. 저장 완료된 파일이 있으면 FTP로파일 전송
:
: * 질문
:   프로그램이 아직 완성되지 않아 어떤 문제가 있을지 확실친 않치만
:   우선 파일 저장시와 파일 전송시 주 프로그램이 메시지를 처리하지 못하는
:   상황이 발생하지 않을까 하는 점입니다. 그래서 테스트용으로
:   프로그램을 하나 만들어 보았는데, 역시 파일저장 쓰레드에서 문제가 생기는
:   것 같습니다. 이전 프로그램(지금 프로그램은 이전에 SDK API 로 짠 것을 BCB용으로 바꾸는 중)
:   에서는 PeekMessage..., 등을 사용 했었는데, 이번에는 Application->ProcessMessage를
:   사용하려고 합니다. 임프님께서 쓰신 글들 중에서 Application->ProcessMessage를
:   사용할때는 주의를 요한다는 글을 본적이 있는데, 이경우 사용해도 되는지 알고 싶습니다.
:   그리고 파일 전송시 파일을 작는 부분으로 나누어 전송하는 것이 아니라 NMFTP 컴포넌트
:   의 Upload 메소드를 사용합니다. 만약 전송하고자 하는 파일의 용량이 메우 클경우
:   전송시 메시지 처리에 문제가 생기는지 아닌지 알고 싶습니다.
:   (현재 테스트 프로그램에서는 별 문제가 없는 것 같긴 한데....)
:   테스트용 프로그램 소스는 아래와 같습니다.
:        
:  
: /* 파일전송 쓰레드 */
: void __fastcall TFTPThread::Execute()
: {
:     HANDLE  hFile;
:     int Sent = 0;
:     String FileName;
:     String FTPFileName;
:     WIN32_FIND_DATA ff;
:     bool NextFile = true;
:
:     FileName = "*.ftp";  /* 확장자가 "ftp" 인 파일 */
:     hFile=FindFirstFile(FileName.c_str(), &ff); /*
:     while(NextFile != 0 && hFile != INVALID_HANDLE_VALUE && Terminated != true)
:     {   /* 확장자가 "ftp" 인 파일을 찾아 전송 */
:         FileName = String(ff.cFileName);
:         FTPFileName = FileName + ".transfer";
:         /* Upload 메소드를 사용하여 전송 */
:         /* 이때 Upload 메소드의 처리가 다 끝나지 않았을 경우(전송중)
:            다른 메시지 처리를 놓치지 않을지.....? */
:         TestMainForm->NMFTP->Upload(FileName, FTPFileName);
:         NextFile=FindNextFile(hFile,&ff);
:     }
: }
:
:
: /* 파일 저장 쓰레드 */
: void __fastcall TSaveThread::Execute()
: {
:     int FileHandle;
:     int TranSize = 0;
:     short int Buf[2048] = {1, }; /* 시험용 데이터 */
:
:     FileHandle = FileCreate(String("TMP.TEST"));
:     do
:     {   /* 극단적인 상황을 가정하여 파일 쓰기를 무한으로 돌림 */
:         FileWrite(FileHandle, (short int*)Buf, sizeof(short int) * 2048);
:         /* 파일 쓰기 무한 루프로 인하여 시스템 응답 無 */
:         /* 여기에 뭔가 처리를 해주긴 해야 할  것 닽긴 한테...... */
:     } while (Terminated != true);
:
:     FileClose(FileHandle);
: }
:

:
:
:

+ -

관련 글 리스트
19708 파일저장 쓰레드 및 파일 전송 쓰레드에서 이밴트 처리 아더 1760 2002/06/29
19746     Re:파일저장 쓰레드 및 파일 전송 쓰레드에서 이밴트 처리 유영인.Chris 1930 2002/07/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.