Q&A

  • Thread를 완전히 없애려면?


Thread를 사용하는데, 처음 Create한후 작업이 끝난후 Free를 호출합니다.

그런데 관리도구-시스템 성능 모니터를 사용하여 현재의 Thread를 살펴보면 해당되는 Thread가 남아 있는 것을 알 수 있습니다.

현재 Program이 Thread를 생성/소멸을 반복하는데 결국 어느 한계에 도달하면

Thread를 생성하지 못하는 것으로 보입니다.



Thread를 완전히 없애려면 어떻게 해야 합니까? 도움을 부탁드립니다.





사용 OS : WindowsNT 4.0(Service Pack3)





--- Program Source -----



unit utCIM;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

DBTables, Db, utBarcode, Math, utParameter, Psock, NMFtp, utString;





type

TSaveThread = class(TThread)

private

GetTableName : String;

Judge : String;

protected

procedure Execute; override;

public

constructor Create;

destructor Destroy; override;

end;



TfrmCIM = class(TForm)

Database: TDatabase;

Table: TTable;

Query: TQuery;

NMFTP1: TNMFTP;

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

ST : TSaveThread;

Running : Boolean;

procedure proSaveDataToCIM;

end;



var

frmCIM: TfrmCIM;



implementation

uses

utMSD, utInitial, utMain, utError, utStation50;



{$R *.DFM}



constructor TSaveThread.Create;

begin

inherited Create(False);



frmCIM.Running := True;

end;



destructor TSaveThread.Destroy;

begin

frmCIM.Running := False;

frmMSD.lblHost.Caption := '전송완료';



// if frmCIM.BarCodeNotPrinted then

// Synchronize(frmBarCode.proSendDataToPrinter);



inherited Destroy;

end;



procedure TSaveThread.Execute;

begin

//작업 진행



Free;

end;



procedure TfrmCIM.FormCreate(Sender: TObject);

begin

Running := False;

end;



procedure TfrmCIM.proSaveDataToCIM;

begin

frmMain.DataIs := True;

if not Running then //if TSaveThread is Created already wait next save time

begin

ST := TSaveThread.Create;

ST.Priority := tpLower;

end;

end;



end.



2  COMMENTS
  • Profile
    김영대 1999.06.30 20:40
    강두헌 께서 말씀하시기를...

    >

    > Thread를 사용하는데, 처음 Create한후 작업이 끝난후 Free를 호출합니다.

    > 그런데 관리도구-시스템 성능 모니터를 사용하여 현재의 Thread를 살펴보면 해당되는 Thread가 남아 있는 것을 알 수 있습니다.

    > 현재 Program이 Thread를 생성/소멸을 반복하는데 결국 어느 한계에 도달하면

    > Thread를 생성하지 못하는 것으로 보입니다.

    >

    > Thread를 완전히 없애려면 어떻게 해야 합니까? 도움을 부탁드립니다.

    >

    >

    > 사용 OS : WindowsNT 4.0(Service Pack3)

    >

    >

    > --- Program Source -----

    >

    > unit utCIM;

    >

    > interface

    >

    > uses

    > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    > DBTables, Db, utBarcode, Math, utParameter, Psock, NMFtp, utString;

    >

    >

    > type

    > TSaveThread = class(TThread)

    > private

    > GetTableName : String;

    > Judge : String;

    > protected

    > procedure Execute; override;

    > public

    > constructor Create;

    > destructor Destroy; override;

    > end;

    >

    > TfrmCIM = class(TForm)

    > Database: TDatabase;

    > Table: TTable;

    > Query: TQuery;

    > NMFTP1: TNMFTP;

    > procedure FormCreate(Sender: TObject);

    > private

    > { Private declarations }

    > public

    > { Public declarations }

    > ST : TSaveThread;

    > Running : Boolean;

    > procedure proSaveDataToCIM;

    > end;

    >

    > var

    > frmCIM: TfrmCIM;

    >

    > implementation

    > uses

    > utMSD, utInitial, utMain, utError, utStation50;

    >

    > {$R *.DFM}

    >

    > constructor TSaveThread.Create;

    > begin

    > inherited Create(False);

    >

    > frmCIM.Running := True;

    > end;

    >

    > destructor TSaveThread.Destroy;

    > begin

    > frmCIM.Running := False;

    > frmMSD.lblHost.Caption := '전송완료';

    >

    > // if frmCIM.BarCodeNotPrinted then

    > // Synchronize(frmBarCode.proSendDataToPrinter);

    >

    > inherited Destroy;

    > end;

    >

    > procedure TSaveThread.Execute;

    > begin

    > //작업 진행

    >

    > Free;

    > end;

    >

    > procedure TfrmCIM.FormCreate(Sender: TObject);

    > begin

    > Running := False;

    > end;

    >

    > procedure TfrmCIM.proSaveDataToCIM;

    > begin

    > frmMain.DataIs := True;

    > if not Running then //if TSaveThread is Created already wait next save time

    > begin

    > ST := TSaveThread.Create;

    > ST.Priority := tpLower;

    > end;

    > end;

    >

    > end.

    >



    안녕하세요 김영대입니다

    Thread 을 free 시키는 방법은 두가지가 있는데

    Thread의 실행이 종료하면 자동으로 free되게 설정하는 방법과

    Thread가 종료할때까지 기다리다(but blocking) 외부에서

    Terminate 로 free 시키는 방법입니다



    <첫번째 방법>

    constructor TSaveThread.Create;

    begin

    // thread object의 instance를 생성한다

    // Create의 파라미터가 False이면 thread를 생성한후 즉시 Execute를 호출하여 실행한다

    // " True이면 Resume을 호출하기 전까지 실행하지 않는다(suspended)

    inherited Create(True);



    // thread의 실행이 종료하면 자동으로 free되게 설정

    FreeOnTerminate := True;



    // 실행이 일시 중지된(suspended) thread를 실행한다

    Resume;



    frmCIM.Running := True;

    end;



    <두번째 방법>

    if not Running then

    begin

    ST := TSaveThread.Create;

    ST.Priority := tpLower;



    ST.Terminate;

    ST.WaitFor; // thread가 종료할때까지 기다린다(but blocking)

    ST := nil;

    end;



    저도 Thread 를 많이 안써봐서 정확한지 모르겠지만 전에

    NT 프로그래밍할때 첫번째 방법으로 free 가 잘 안되서

    두번째 방법으로 했었습니다

  • Profile
    강두헌 1999.07.05 18:43
    김영대 께서 말씀하시기를...

    >

    > 안녕하세요 김영대입니다

    > Thread 을 free 시키는 방법은 두가지가 있는데

    > Thread의 실행이 종료하면 자동으로 free되게 설정하는 방법과

    > Thread가 종료할때까지 기다리다(but blocking) 외부에서

    > Terminate 로 free 시키는 방법입니다

    >

    > <첫번째 방법>

    > constructor TSaveThread.Create;

    > begin

    > // thread object의 instance를 생성한다

    > // Create의 파라미터가 False이면 thread를 생성한후 즉시 Execute를 호출하여 실행한다

    > // " True이면 Resume을 호출하기 전까지 실행하지 않는다(suspended)

    > inherited Create(True);

    >

    > // thread의 실행이 종료하면 자동으로 free되게 설정

    > FreeOnTerminate := True;

    >

    > // 실행이 일시 중지된(suspended) thread를 실행한다

    > Resume;

    >

    > frmCIM.Running := True;

    > end;

    >

    > <두번째 방법>

    > if not Running then

    > begin

    > ST := TSaveThread.Create;

    > ST.Priority := tpLower;

    >

    > ST.Terminate;

    > ST.WaitFor; // thread가 종료할때까지 기다린다(but blocking)

    > ST := nil;

    > end;

    >

    > 저도 Thread 를 많이 안써봐서 정확한지 모르겠지만 전에

    > NT 프로그래밍할때 첫번째 방법으로 free 가 잘 안되서

    > 두번째 방법으로 했었습니다



    도와주신 덕분에 문제가 풀렸습니다. 감사드립니다.

    • 1999.06.30 09:57
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.06.30 11:04
      쩝.. BDE쪽은 잘 모르겠구.. 혹시 다이아몬드 컴포넌트라고 아시면 그것으로는 암호를 물어보던가 아니...
    • 한승현
    • 1999.04.20 18:31
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김영해
      1999.04.21 06:20
      한승현 wrote: > > 회사에서 다른 사람의 CD-ROM을 공유해서 > 델파이를 설치를 하려고 하는데 > 맨처...
    • 한승현
      1999.04.21 19:19
      김영해 wrote: > 한승현 wrote: > > > > 회사에서 다른 사람의 CD-ROM을 공유해서 > > 델파이를 설치...
    • 이호선
    • 1999.04.20 18:21
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 허일학
      1999.06.30 06:27
      제발부탁드립니다.... 안녕하세요. TreeView에서 자식item을 클릭했을때....부모item을 알아낼수있는 ...
    • 구창민
      1999.04.20 20:41
      이호선 wrote: > 안녕하세요. > 다름이 아니라 화면에 버튼이 많아서 딱딱한 느낌이 들어서 > 모나지 않...
    • 구창민
      1999.06.30 09:16
      허일학 께서 말씀하시기를... > 제발부탁드립니다.... > > 안녕하세요. > TreeView에서 자식item을 클...
    • 전은주
      1999.04.20 18:19
      이미지 인쇄하는 방법을 하이텔과 이곳을 방문하여 찾아본 자료로 jpg 화일을 인쇄하려고 예제에 대입해...
    • 남호열
      1999.06.30 23:10
      홍희석 께서 말씀하시기를... > 아래의 문장중 잘못된 곳을 찾아주세요.. > 에러메세지가 > 우괄호가 ...
    • 공대규
      1999.04.21 02:06
      안녕하세요, 은주님... 소스를 보여주실래요? 제가 지금 그런 일을 하는데 한번 볼께요. 그럼... ...
    • 남호열
      1999.06.30 23:10
      홍희석 께서 말씀하시기를... > 아래의 문장중 잘못된 곳을 찾아주세요.. > 에러메세지가 > 우괄호가 ...
    • 강두헌
    • 1999.06.30 05:34
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김영대
      1999.06.30 20:40
      강두헌 께서 말씀하시기를... > > Thread를 사용하는데, 처음 Create한후 작업이 끝난후 Free를 호출합...
    • 강두헌
      1999.07.05 18:43
      김영대 께서 말씀하시기를... > > 안녕하세요 김영대입니다 > Thread 을 free 시키는 방법은 두가지가...
    • 우민석
    • 1999.04.20 07:05
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 1999.04.20 19:58
      우민석 wrote: > 제가 만들고 싶은 프로그램은 HWP에서 처럼 HW P에서 저장된 화일은 윈도우의 탐색기에서...
    • 김영대
      1999.04.20 17:52
      우민석 wrote: > 제가 만들고 싶은 프로그램은 HWP에서 처럼 HW P에서 저장된 화일은 윈도우의 탐색기에서...
    • 안치봉
      1999.04.20 08:07
      우민석 wrote: > 제가 만들고 싶은 프로그램은 HWP에서 처럼 HW P에서 저장된 화일은 윈도우의 탐색기에서...
    • 강성만
    • 1999.06.30 04:38
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.06.30 08:56
      강성만 께서 말씀하시기를... > 제발좀 도와주세요 > 혼자서 고민하다 이렇게 글을 올림니다. > > 델...
    • 김경수
    • 1999.04.20 14:37
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김경수
      1999.04.21 07:04
      안녕하세요... query문에 조건에 맞는 데이타를 불러드리구요, 변수i를 선언하고 인쇄하기전에 하나씩 ...
    • 김선호
    • 1999.06.30 04:14
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.06.30 08:25
      김선호 께서 말씀하시기를... > 스트링 문자열에 '
    • 이승윤
    • 1999.06.30 02:40
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 우민석
      1999.04.20 07:05
      제가 만들고 싶은 프로그램은 HWP에서 처럼 HW P에서 저장된 화일은 윈도우의 탐색기에서 아이콘 모양도 나...
    • 궁금이
      1999.06.30 03:49
      이승윤 께서 말씀하시기를... > SQLServer7.0을 처음 사용합니다. > 서버에 설치된 TRANS라는 DB를 디스...
    • 1999.04.20 19:58
      우민석 wrote: > 제가 만들고 싶은 프로그램은 HWP에서 처럼 HW P에서 저장된 화일은 윈도우의 탐색기에서...
    • 김영대
      1999.04.20 17:52
      우민석 wrote: > 제가 만들고 싶은 프로그램은 HWP에서 처럼 HW P에서 저장된 화일은 윈도우의 탐색기에서...
    • 안치봉
      1999.04.20 08:07
      우민석 wrote: > 제가 만들고 싶은 프로그램은 HWP에서 처럼 HW P에서 저장된 화일은 윈도우의 탐색기에서...
    • 엠마
    • 1999.04.20 07:46
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 왕초
      1999.06.30 02:39
      Parent Mdi Form의 바탕에 이미지를 넣으려고 합니다.. 그냥 이미지 컴포넌트 넣고는 안되던데.. 메세지...
    • 이채원
      1999.04.20 08:00
      엠마 wrote: > 안녕하세요.. > 쿼리한후에 DBgrid 쿼리한 데이타를 뿌려주고는 tab이나 화살표-> 어떻...
    • 구창민
      1999.06.30 08:24
      왕초 께서 말씀하시기를... > Parent Mdi Form의 바탕에 이미지를 넣으려고 합니다.. > 그냥 이미지 컴포...
    • 엠마
    • 1999.04.20 07:46
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 배선경
      1999.06.30 02:32
      안녕하세요? .. 궁금한것이 있어요. TWinControl의 SetFocus 프로시져를 Tcontrol 오브젝트에서 사용...
    • 이채원
      1999.04.20 08:00
      엠마 wrote: > 안녕하세요.. > 쿼리한후에 DBgrid 쿼리한 데이타를 뿌려주고는 tab이나 화살표-> 어떻...
    • 전철호
      1999.06.30 18:23
      배선경 께서 말씀하시기를... > 안녕하세요? > .. > 궁금한것이 있어요. > TWinControl의 SetFocus 프...
    • 송동일
    • 1999.06.30 02:28
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.06.30 08:53
      송동일 께서 말씀하시기를... > 안녕하세요? > > dbgrid에서 rowselect := true; > 로 해놓고... > d...
    • 변상준
    • 1999.06.30 02:27
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 우민석
      1999.04.20 07:05
      제가 만들고 싶은 프로그램은 HWP에서 처럼 HW P에서 저장된 화일은 윈도우의 탐색기에서 아이콘 모양도 나...
    • 1999.04.20 19:58
      우민석 wrote: > 제가 만들고 싶은 프로그램은 HWP에서 처럼 HW P에서 저장된 화일은 윈도우의 탐색기에서...
    • 김영대
      1999.04.20 17:52
      우민석 wrote: > 제가 만들고 싶은 프로그램은 HWP에서 처럼 HW P에서 저장된 화일은 윈도우의 탐색기에서...
    • 안치봉
      1999.04.20 08:07
      우민석 wrote: > 제가 만들고 싶은 프로그램은 HWP에서 처럼 HW P에서 저장된 화일은 윈도우의 탐색기에서...
    • 장영선
    • 1999.04.20 01:14
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 권창진
      1999.06.30 02:00
      Qreport 하던중에 Metafile is not valied가 났습니다. 어떻게 해야 하나요? 조금 급합니다.
    • 안치봉
      1999.04.20 05:15
      장영선 wrote: > 안녕하세요......... > 지난번에 도움주신분께 정말 감사 드려요.... > 제가한 프로그...
    • 손락환
    • 1999.06.30 00:41
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 정재홍
      1999.07.01 09:21
      손락환 께서 말씀하시기를... > project *.exe raised exception class EDatabaseError with message > '...
    • 이종국
      1999.06.30 01:04
      손락환 께서 말씀하시기를... > project *.exe raised exception class EDatabaseError with message > '...
    • Atom
    • 1999.06.30 00:41
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 배재민
      1999.04.20 01:57
      클라이언트 소켓에서 서버소켓으로 연결을 할 경우 서버 프로그램(서버 소켓)이 실행되어있지 않을 경우 ...
    • 전철호
      1999.04.20 03:36
      배재민 wrote: > 클라이언트 소켓에서 서버소켓으로 연결을 할 경우 > 서버 프로그램(서버 소켓)이 실행...
    • 배재민
      1999.04.20 04:04
      > Try..Except..End 절을 이용하시면 됩니다. > 예를 들어서 > Try > 소켓 연결부분 코딩 > Except ...
    • 구창민
      1999.04.20 05:15
      배재민 wrote: > > > Try..Except..End 절을 이용하시면 됩니다. > > 예를 들어서 > > Try > > 소...
    • 이동건
    • 1999.06.30 00:32
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 조민경
      1999.06.30 01:02
      이동건 께서 말씀하시기를... > 안녕하세요.. > > NT4.0 서버를 사용하고 오라클 8.0.4를 사용합니다. ...
    • 전철호
      1999.04.20 03:36
      배재민 wrote: > 클라이언트 소켓에서 서버소켓으로 연결을 할 경우 > 서버 프로그램(서버 소켓)이 실행...
    • 배재민
      1999.04.20 04:04
      > Try..Except..End 절을 이용하시면 됩니다. > 예를 들어서 > Try > 소켓 연결부분 코딩 > Except ...
    • 구창민
      1999.04.20 05:15
      배재민 wrote: > > > Try..Except..End 절을 이용하시면 됩니다. > > 예를 들어서 > > Try > > 소...
    • 이호선
    • 1999.06.30 00:11
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하남수
      1999.06.30 01:13
      안녕하세요 델피 4.0에 TNMFTP라는 컴포넌트가 있습니다. 프러퍼티 설정후 (IP, UserID/PassWord, etc.....