Q&A

  • 스레드 관련에러 소스좀 봐주세요.
스레드를 밑에처럼 만들었는데 이걸 사용할때는 괜찮거든요.
그런데 실행파일을 닫아버리면 메모리 에러가 나네요
실행중일땐 에러가 안뜹니다..
스레드를 죽이지 않아서 그런건지 어떤건지 감이 안오네요..
스레드에 관해 알고 계시는분 좀 조언좀 부탁합니다.

/*이상 스레드 실행시키는  버튼입니다.*/
procedure TfMainToolBar.Button1Click(Sender: TObject);
var
    MergeThread1 : MergeThread;
begin
     MergeThread1 := MergeThread.Create(MergeQuery1, MergeGrid1,ZPgSqlDatabase1,ZPgSqlTransact2);
     MergeThread1.OnTerminate := lastThread;

end;

type
  MergeThread = class(TThread)
  private
    { Private declarations }
    Query1: TZPgSqlQuery;
    Grid1: TMergeGrid;
    Transact1: TZPgSqlTransact;
    Database1: TZPgSqlDatabase;
    //ZPgSqlTransact1: TZPgSqlTransact;
  protected
    procedure Execute; override;
    procedure  MselectQuery;
  public
    constructor Create(Query:TZPgSqlQuery ;Grid : TMergeGrid;Database: TZPgSqlDatabase;Transact: TZPgSqlTransact);
    destructor Destroy; override;
  end;
  const
  DIMS_INI_FILE = 'DIMS.INI';

implementation

{ Important: Methods and properties of objects in VCL can only be used in a
  method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure MergeThread.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{ MergeThread }
constructor MergeThread.Create(Query:TZPgSqlQuery ;Grid : TMergeGrid;Database: TZPgSqlDatabase;Transact: TZPgSqlTransact);
begin

    Query1:= Query;
    Grid1:= Grid;
    Transact1:=Transact;
    Database1:=Database;
    freeOnTerminate := true;
    Inherited Create(false);
end;
destructor MergeThread.Destroy;
begin
  {Database1.Free;
  Transact1.Free;
  Query1.Free;
  Grid1.Free;}
  Inherited Destroy;

end;

procedure  MergeThread.MselectQuery;
var

    DimsIniFile : TIniFile;
    uid : String;
begin
    DimsIniFile := TIniFile.Create(DIMS_INI_FILE);
    Transact1.Database := Database1;
    Query1.Database := Database1;
    Query1.Transaction := Transact1;

    with Database1 do begin
       Database := 'dims';
       Host     := DimsIniFile.ReadString('DIMS SERVER', 'IP', '');
       Login    := 'dims';
       Password := 'dimssql';
       Connect;
    end;


    Query1.close;
    Query1.sql.Clear;
    Query1.Sql.Add('select * from admin_tbl');
    Query1.Open;
    Grid1.Cells[1, 1]:= IntTostr(Query1.RecordCount);


end;

procedure MergeThread.Execute;
begin
  { Place thread code here }
       Synchronize(MselectQuery);
  if Terminated then exit;
end;
2  COMMENTS
  • Profile
    김용덕 2002.07.06 05:54

    안녕하세요.
    제가 보기에는 Thread에서 어떤 오류가 있어서 나는 에러같지는 않습니다.
    source를 보니 실질적으로 Thread에서 실행되는 부분은 하나도 없군요.
    Synchronize를 사용하게 될 경우에는 Synchronize안에 있는 함수는 Main Thread에서 호출 되거든요.
    결과적으로 Thread에서 한것은 Synchronize호출하고 Main Thread가 이 함수 수행할 때까지 기다린 다음에 종료한것 밖에 없기 때문에 다른 곳에서 나는 문제 같군요.
    도움이 되시길...
  • Profile
    이호성 2002.07.07 07:31
    Synchroniz함수를 빼버리면 스레드 역할을 하지 않나요?
    제가 생각하기에는 할것 같은데..
    만약 이 소스에서 Synchronize함수를 빼더라도 같은 에러가 납니다.
    보통 다른 일반적인 책이나 아니면 demos에 있는 소스 같은거는
    메모리에러가 나지 않는데..winzwos컴퍼넌트에 문제가 있는건 아닌지.
    정말 급한데 몇일동안 이것땜시 고생하고 있습니다..
    이것저것해보아도 잘되지않아 난감합니다.


    • 최용일
      2002.07.06 20:15
      안녕하세요. 최용일입니다. 물론 API함수인 RegQueryValueEx를 쓰셔두 되지만 델파이의 TRegistry를 쓰...
    • 손준호
    • 2002.07.06 19:19
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.07.06 20:29
      안녕하세요. 최용일입니다. 그냥 1분씩 증가시켜주시면 될텐데요... var     N...
    • 조성택
    • 2002.07.06 11:31
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 안두식
    • 2002.07.06 07:25
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 송해광
      2002.07.06 08:36
      초보땐 다 그러죠.. Table1 <==  요걸쓴다면 edit1.Text := table1.FieldByName('전...
    • 진성열
      2002.07.06 21:56
      소스 파일 크기는 맞습니다. 큰게 싫다면 ASPACK같은 툴로 exe 자체를 압축하는 방법도 있습니다. a...
    • ji
    • 2002.07.06 06:30
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2002.07.06 07:53
      hsr////////////////////////////////////////////// 먼저 ListBox의 속성중 Style을 lbOwnerDrawFixed 나...
    • 하종옥
    • 2002.07.06 05:52
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 염상철
      2002.07.06 21:11
      저도 그부분이 궁굼합니다.. 알면 알려주세요..
    • 이호성
    • 2002.07.06 05:41
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김용덕
      2002.07.06 05:54
      안녕하세요. 제가 보기에는 Thread에서 어떤 오류가 있어서 나는 에러같지는 않습니다. source를 보니 ...
    • 이호성
      2002.07.07 07:31
      Synchroniz함수를 빼버리면 스레드 역할을 하지 않나요? 제가 생각하기에는 할것 같은데.. 만약 이 소스...
    • 오현주
    • 2002.07.06 05:22
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 넘버3
      2002.07.06 05:34
      자료실에 올려놨습니다. 유용하게 사용하십시오. 그러나 지적소유건에 걸리는지는 좀 생각을 해봐야 겠네...
    • 김성민
    • 2002.07.06 04:56
    • 6 COMMENTS
    • /
    • 0 LIKES
    • 단현석
      2002.07.06 17:58
      제 생각에는 오라클의 Sequence 같은 기능을 사용하시는 것이 좋을 것 같습니다. 그리고 답변중에 멀티 ...
    • 김성민
      2002.07.06 18:41
      ------ 먼저.. 답변 감사드립니다. *꾸벅* 답변주신것중에 여쭤보고싶은게 있는데요.. 트랜잭션처...
    • 단현석
      2002.07.06 20:07
      트랜잭션 처리란게 별게 아니라.. 사용자가 작업한 데이터 수정, 삭제, 삽입 관련 내용을 클라이언트 캐쉬...
    • 양용성
      2002.07.06 05:34
      안녕하세요 양용성입니다. 저 같은 경우에는 Insert 시 처음 등록시에는 사용자가 입력 받을땐 일련...
    • 김성민
      2002.07.06 06:03
      앗. 빠른답변 정말 감사드립니다 *꾸벅* ----- 흐음.. 그 일련번호는 유저는 보지 않구요. 물론 입...
    • 성더기
      2002.07.06 18:58
      조위에 답변처럼 필드를 증가필드를 사용하시면 될거 같구요 이경우에는 아마 굳이 트랜젝션처리를 하지 ...
    • 하얀까마귀
      2002.07.06 10:52
      안녕하세요 하얀까마귀 입니다. 인터베이스는 안써봐서 잘모르겠는데. 서버이름이라는게 어떤걸 말씀하...
    • 김명성
      2002.07.07 01:08
      인터베이스의  GDB파일이 있는 경로를 SERVER NAME으로 씁니다. 근데 결국 session에서 읽...
    • 이동현
    • 2002.07.06 03:41
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 성더기
      2002.07.06 03:53
      자식노드를 만든다는 거는 ---한국 |     |---축구 | ---스페인 | ---이탈리...
    • 홍성락
      2002.07.06 03:51
      hsr////////////////////////////////////////////////////////////// TreeView1.Items.AddChild(TreeView...
    • 오소영
    • 2002.07.06 03:25
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2002.07.06 03:34
      hsr/////////////////////////////////////////////////////////// assigned를 써보세요 if assigned(For...
    • 조성택
    • 2002.07.06 03:19
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 이경문
      2002.07.08 13:01
      http://www.vdream.co.kr 에 관련 컴포넌트가 있습니다. TPCMWaveIn, TPCMWaveOut입니다.
    • 진성열
      2002.07.06 22:01
      MP3 인코더가 어떤 종류의 PCM이나 WAVE를 지원하냐에 달려있겠죠. PCM에는 여러 종류가 있지만 대략 4...
    • 조성택
      2002.07.10 01:01
      무료 mp3 Encoder 가있나요..또 Microsoft PCM 으로 녹음할려면 mp3 인코더가 필요한가요??PCM 녹음하는 ...
    • 김진기
    • 2002.07.06 02:55
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 최종철
    • 2002.07.06 02:50
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 이수연
    • 2002.07.06 02:16
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 넘버3
      2002.07.06 02:56
      다음과 같이 해보세요. Example입니다. 즐거운 하루되세요. unit LsyEditpas; interface uses &...
    • 이수연
      2002.07.08 18:37
      우선 답변주셔서 매우 감사합니다. 답변주신 내용은 panel에 대한 OnKeyPress인것같아요. editbox의 ev...
    • 개미
    • 2002.07.06 02:14
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 조강수
      2002.07.06 03:24
      문제는 B의 data set 인것 같습니다. join하실때 B의 data set을 dood1만 있는 것으로 만드시면 될듯합...
    • 개미
      2002.07.06 03:52
      답변 감사합니다. 'join하실때 B의 data set을 dood1만 있는 것으로 만드시면 될듯합니다.' 이게 무...
    • 성더기
      2002.07.06 19:08
      그러면  where b.autokey = '첫번째' 하시면 될건데요..
    • 성더기
      2002.07.06 02:35
      distinct A.Code  해주믄 될거 같은데욤..
    • 개미
      2002.07.06 03:53
      답변 감사합니다. 요건 해본 방법인데 distinct 가 join하니깐..안먹히는거 같아요. 암튼 감사합니당.
    • 이호성
    • 2002.07.06 02:01
    • 0 COMMENTS
    • /
    • 0 LIKES