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
[19708] 파일저장 쓰레드 및 파일 전송 쓰레드에서 이밴트 처리
아더 [] 1760 읽음    2002-06-29 23:12
안녕하세요. 프로그램을 작성하다가 막히는 부분이 있어
글을 올립니다. 프로그램이 하는 일은 다음과 같습니다.

* 주 프로그램과 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 1931 2002/07/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.