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

델파이 Q&A
Delphi Programming Q&A
[15061] Re:ZeosDB TZQuery Open시 렉 문제. - 자답 1.
kivalan [openpgc] 2144 읽음    2014-03-13 04:33
자답.  왜 TZQuery에 Thread 옵션이 있어서 내부적으로 threadOpen이 있으면 좋은데. 없어서 그냥 이렇게 사용합니다.

type
  TQThread = class(TThread)
  private
    FQuery: TZQuery;
    FONEnd: Boolean;

    FLogMsg: string;
    procedure SetONEnd(const Value: Boolean);
  protected
    procedure Execute; override;
  public
    constructor Create(Query: TZQuery);
    property OnEnd: Boolean read FONEnd write SetONEnd;
    procedure SyncLogMsg;
  end;



constructor TQThread.Create(Query: TZQuery);
begin
  inherited Create(True);
  FQuery := Query;
    // FreeOnTerminate := True;    //Free thread when finished executing
  FONEnd := False;
  Resume;
end;

procedure TQThread.Execute;
begin
  try
    try
      FQuery.Open; // Perform the query

    except
      on E: EZSQLException do
      begin

        FLogMsg := 'TQThread :  '+ E.Message;
        Synchronize(SyncLogMsg);

      end;
    end;

  finally
    FONEnd := True;
  end;

end;

procedure TQThread.SetONEnd(const Value: Boolean);
begin
  FONEnd := Value;
end;

procedure TQThread.SyncLogMsg;
begin

  if assigned(frmStateUpLoader) then
  begin
    if Trim(FLogMsg) <> '' then
    begin
      frmStateUpLoader.PrintLog(FLogMsg);
      FLogMsg := '';
    end;
  end;

end;


사용시.

// 쓰레드를 빌어 쿼리 오픈.
aQuery.SQL.TEXT L= '쿼리';
aWaitQuery := TQThread.Create(aQuery);

//기다렸다가..
        repeat
          Sleep(1);
          Application.ProcessMessages;
        until aWaitQuery.OnEnd;
        aWaitQuery.Terminate;
// Open되면..  그후에 사용.


구조가 좀 지저분 한데
TZQuery를 상속받아서  Open시 Thread로 동작하는 클래스를 만들 수 있을까요??





kivalan 님이 쓰신 글 :
: 안녕하세요.
:
: 델파이 XE2 이구요.
: ZeosDB 사용시. 테이블이 거대해지면. TZQuery 에서 Open 시에 렉이 걸리는데.
: 이게 Application 렉이 걸려 버립니다.
:
:
: Query 사용시에 어떻게 사용하시나요?
: 쓰레드에 넣어서 출력해야 하는건지요?
:

+ -

관련 글 리스트
15047 ZeosDB TZQuery Open시 렉 문제. kivalan 2033 2014/03/06
15061     Re:ZeosDB TZQuery Open시 렉 문제. - 자답 1. kivalan 2144 2014/03/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.