스레드를 사용하다보면 내부에서 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.
'프로그래밍 > 델파이' 카테고리의 다른 글
URLOpenBlockingStream을 이용하여 스트림으로 다운로드 받기 (0) | 2008.08.07 |
---|---|
Delphi 7에서 일반 소스로 배포하는 패키지 설치하는 방법 (1) | 2008.07.30 |
윈도우즈 이벤트에 내 프로그램의 로그 기록하기(SvcMgr.TEventLog) (0) | 2008.03.24 |
외부 IE에 내가 원하는 페이지로 이동시키기 (0) | 2008.02.29 |
주어진 프로세스 ID의 IE에 대한 IWebBrowser2 구하기 (0) | 2008.02.29 |