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
[20505] Re:파일쓰기 스레드에서 메시지처리를 원할하게 하는 방법
Enserver [] 1382 읽음    2002-07-30 06:40
스레드의 Execute내에서 루프로 지속적으로 쓰기때문에 그런 문제가 발생합니다.

1024바이트의 버퍼를 사용하더라도 스레드내의 루프가 워낙 빨라 계속적으로파일을 쓰는 것과 같습니다. (아마 순식간에 수십,수백메가로 파일용량이 커질 것입니다.)

이런식으로 하면 어떤 하드디스크도 감당하기 힘들것입니다. 일정시간만 스레드를 돌려도 하드디스크가 꽉 찰 것입니다. 타이머를 써든가하는 등 프로그램 로직을 바꾸는 것이 좋겠군요.



아더 님이 쓰신 글 :
: 안녕하세요. 이곳에서 많은 도움을 받고 있는 사람입니다. 매번 질문을 올릴때마다
:
: 친절한 답을 해주셔서 많은 분께 감사드립니다. 이번에도 도움을 부탁 드립니다.
:
: ------- 질문 ----------
: 하나의 프로그램에서 3가지 정도의 작업을 해야 하는데, 하나의 작업은
: 계속해서 파일 쓰기를 해야하는 작업입니다. 파일 쓰기를 하는 작업을
: 쓰레드를 하나 생성해서 하고 있는데, 파일쓰기를 할 경우 메시지 처리를
: 하지 못하는 것 같습니다. 아래서와 같이 스레드의 루프안에 일반 변수등의
: 계산에 관련된 명령만이 있을시는 스레드가 돌아가는 동안에 마우스도 잘움직이고
: 하는데, 파일쓰기등의 작업을 하면 마우스가 멈추거나 잘 움직이지 않습니다.
: 그래서 Application->ProcessMessages()를 사용해 보았는데, 별반차이가 없군요.
: 어떻게 해결할 수 있는 방법이 없을까요.
: 아참 그리고, 파일 작업 중 FileOpen, FileWrite 등의 API함수와 TFileStream의
: Builder 제공 함수와 fopen, fwrite 등의 ANSI 함수중 어떤 것이
: 제일 안정적이고 빠른지 알고 싶습니다.
: 제가 제 짧은 실력으로 테스트 해본 결과는 스피드 면에서 API, Builder 함수는
: 서로 비슷하고 ANSI 함수가 약간 느린것 같은데....
:
: 그럼 많은 가르침 부탁 드리겠습니다.
:
:
: -----------테스트  소스 일부------------------
: #include <vcl.h>
: #pragma hdrstop
:
: #include <stdio.h>
:
: #include "Unit2.h"
: #pragma package(smart_init)
:
: __fastcall FileThread::FileThread(bool CreateSuspended)
:     : TThread(CreateSuspended)
: {
:     FreeOnTerminate = true;
: }
: //---------------------------------------------------------------------------
: void __fastcall FileThread::Execute()
: {
:     FILE* fp = fopen("test", "wb");
:     int i;
:     int buf[1024];
:
:     do
:     {
:       1-------> i++;
:       2-------> fwrite(buf, sizeof(int), 1024, fp);
:       3-------> Application->ProcessMessages();
:     } while (!Terminated);
:
:     1)번 코드 같은 메모리 관련 명령만을 나열시 이벤트의 놓침이 없이
:     잘 돌아감(마우스의 움직임이 부드러움)(3번 코드 필요 없음)
:     2)번 같은 파일 쓰기 등의 명령이 루프안에 있으면 이벤트의
:     놓침이 있음. 3번코드를 추가해도 별반 차이가 없음(마우스가
:     움직이지 않거나 움직임이 부드럽지 못함)
:
:
:     fclose(fp);
: }
: //---------------------------------------------------------------------------
:

+ -

관련 글 리스트
20499 파일쓰기 스레드에서 메시지처리를 원할하게 하는 방법 아더 1042 2002/07/29
20543     자답:파일쓰기 스레드에서 메시지처리를 원할하게 하는 방법 아더 1539 2002/07/30
20505     Re:파일쓰기 스레드에서 메시지처리를 원할하게 하는 방법 Enserver 1382 2002/07/30
20500     Re:답변 아님 @.@ 920 2002/07/30
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.