프로그래밍/델파이

스레드 내부에서 Sleep 하면 suspended 상태인가?

채윤아빠 2008. 4. 10. 14:12
728x90
반응형

스레드를 사용하다보면 내부에서 Sleep로 일정 시간 기다리게 하는 상황이 발생하는데...
Sleep로 작업 스레드가 중지 되어 있는 상태에 스레드 내부 속성중 Suspended 속성이 true인지 궁금하였다.

결론적으로 Sleep과 스레드의 Suspended와는 아무런 연관이 없다.
Suspended에 영향을 주는 것은 오직 Suspend 메소드를 이용하여 그 상황을 만드는 것 뿐이다.

Suspend 메소드를 호출하여 스레드가 일시 정지된 상태에서 다시 스레드를 동작시키기 위해서는 Resume 메소드를 호출해 주면 된다.

아래 코드는 Sleep한 스레드가 Suspended 상태인지 검사해본 예제 소스 이다.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TSleepThread = class(TThread)
  protected
    procedure Execute; override;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    FSleepThread : TSleepThread;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TSleepThread }

procedure TSleepThread.Execute;
begin
  inherited;

  FreeOnTerminate := true;
  Sleep(5000);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if (FSleepThread.Suspended) then
    ShowMessage('Thread is suspended...');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FSleepThread := TSleepThread.Create(false);
  FSleepThread.Resume;
end;

end.