<8> 이벤트(Delphi 동시 프로그래밍)
이벤트(Event)는 동기화 객체 중 하나입니다.대기 중인 모든 라인에 접근할 수 있습니다.
8.1. TEvent
TEvent류1는 System.SyncObjs에 의해 정의되었다.첫 번째 형식의 구조기에서 이름이 비어 있지 않으면 시스템 이벤트를 만들 것입니다.
ManualReset 매개변수가 True이면 수동 이벤트가 되고 ResetEvent() 메서드를 실행하지 않으면 비신호 상태가 되지 않습니다.False는 자동으로 리셋되며 WaitFor() 방법에서 대기된 라인을 처리하기 시작하면 비신호 상태가 됩니다.InitialState 속성은 신호의 초기 상태이다.True는 신호 상태이고 False는 비신호 상태입니다.두 번째 형식의 구조기를 사용하면 이름 없는 이벤트를 만들 것입니다.익명 활동은 로컬 활동입니다.수동 재설정, 비신호 상태에서 생성.
constructor Create(EventAttributes: PSecurityAttributes; ManualReset, InitialState: Boolean; const Name: string; UseCOMWait: Boolean = False);
constructor Create(UseCOMWait: Boolean = False);
Delphi
Windows API
TEvent.Create()구조기
CreateEventA() / CreateEventW()
TEvent.WaitFor 속성
WaitForSingleObject()
TEvent.SetEvent() 방법
SetEvent()
TEvent.ResetEvent() 방법
ResetEvent()
WaitFor() 방법으로 대기할 수 있는 스레드 알림 이벤트(비신호->신호).See also:
이벤트는 동기화 대상이기 때문에 전역 실례로 만들어지지만
SetEvent()의 필드로 사용하면 재미있습니다.다음 단원을 제작합니다.
uEVThread.pas
unit uEVThread;
interface
uses
  System.Classes, System.SyncObjs, Vcl.StdCtrls;
type
  TEvThread = class(TThread)
  private
    FEvent: TEvent;
    FComponent: TComponent;
  protected
    procedure TerminatedSet; override;
  public
    constructor Create(Component: TComponent); overload;
    destructor Destroy; override;
    procedure Stop;
    property  Event: TEvent read FEvent write FEvent;
    property  Component: TComponent read FComponent write FComponent;
  end;
implementation
{ TEvThread }
constructor TEvThread.Create(Component: TComponent);
begin
  FEvent := TEvent.Create;
  FComponent := Component;
  FreeOnTerminate := True;
  inherited Create(True);
end;
destructor TEvThread.Destroy;
begin
  FEvent.Free;
  inherited;
end;
procedure TEvThread.Stop;
begin
  Terminate;
  FEvent.SetEvent;
end;
procedure TEvThread.TerminatedSet;
begin
  inherited;
  FEvent.SetEvent;
end;
end.
 
 uses
  ..., uEvThread;
type
  TMyThread = class(TEvThread)
  protected
    procedure Execute; override;
  end;
...
{ TMyThread }
procedure TMyThread.Execute;
begin
  inherited;
  if not Terminated then
    begin
      TThread.Sleep(5000);
      Synchronize(
        procedure
        begin
          (Component as TMemo).Lines.Add('Start');
        end
      );
    end;
end;
// [Start] ボタン
procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Clear;
  MyThread := TMyThread.Create(Memo1);
  MyThread.Start;
end;
// [Stop] ボタン
procedure TForm1.Button2Click(Sender: TObject);
begin
  MyThread.Stop; // または MyThread.Terminate;
  Memo1.Lines.Add('Stop');
end;
TThread가 되지 않으므로 [start] 버튼을 5초 누르면'Start'가 표시됩니다. 
 이어서
Sleep(5000) 방법 내Execute()를 Sleep(5000)로 변경한다.procedure TMyThread.Execute;
begin
  inherited;
  if not Terminated then
    begin
//    TThread.Sleep(5000);
      Event.WaitFor(5000); // <-
      Synchronize(
        procedure
        begin
          (Component as TMemo).Lines.Add('Start');
        end
      );
    end;
end;
procedure TMyThread.Execute;
begin
  inherited;
  if not Terminated then
    begin
      Event.WaitFor(5000);
      if not Terminated then // <-
        Synchronize(
          procedure
          begin
            (Component as TMemo).Lines.Add('Start');
          end
        );
    end;
end;
 
 See also:
Event.WaitFor(5000)류2는 TSimpleEvent에 의해 정의되었다.현재 구현 시나리오에서
System.SyncObjs 클래스와 TSimpleEvent 클래스(이름 없는 이벤트)는 다름없음3.예전에도 구조기만 달랐다.constructor TSimpleEvent.Create;
begin
  inherited Create(nil, True, False, '');
end;
TEvent류4는 매우 가벼운 활동이다.TLightweightEvent에서 정의합니다.그러나 로컬 활동으로만 사용할 수 있습니다.. NET에 해당하는
System.SyncObjs류.See also:
[ ← 7. 신호(동기화 대상) ] [ 목록에서 ↑ ] [ → 9. 비동기 라이브러리(APL) ]
ManualResetEventSlim는 델피3 이후에 사용할 수 있습니다.  ↩ TEvent는 델피3 이후에 사용할 수 있습니다.  ↩ TSimpleEvent는 델피 2005년 이후TSimpleEvent의 별명이다.  ↩ TEvent는 Delphi XE 이후에 사용할 수 있습니다.  ↩ Reference
이 문제에 관하여(<8> 이벤트(Delphi 동시 프로그래밍)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ht_deko/items/c6317b1bb7ad6dd47476텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)