Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
prog:lazarus:a_etudier [26/04/2021 20:03] thierry créée |
prog:lazarus:a_etudier [27/04/2021 17:16] (Version actuelle) thierry [TLockedEvent = specialize TThreadedData<TNotifyEvent>;] |
||
---|---|---|---|
Ligne 8: | Ligne 8: | ||
end; | end; | ||
+ | </code> | ||
+ | ===== TLockedEvent = specialize TThreadedData<TNotifyEvent>; ===== | ||
+ | |||
+ | <code delphi LazWebsockets\src\wsstream.pas> | ||
+ | TLockedEvent = specialize TThreadedData<TNotifyEvent>; | ||
+ | ... | ||
+ | function GetOnClose: TNotifyEvent; | ||
+ | procedure SetOnClose(AValue: TNotifyEvent) | ||
+ | ... | ||
+ | property OnClose: TNotifyEvent read GetOnClose write SetOnClose; | ||
+ | ... | ||
+ | function TWebsocketCommunicator.GetOnClose: TNotifyEvent; | ||
+ | begin | ||
+ | try | ||
+ | Result := FOnClose.Lock^; | ||
+ | finally | ||
+ | FOnClose.Unlock; | ||
+ | end; | ||
+ | end; | ||
+ | |||
+ | procedure TWebsocketCommunicator.SetOnClose(AValue: TNotifyEvent); | ||
+ | begin | ||
+ | try | ||
+ | FOnClose.Lock^ := AValue; | ||
+ | finally | ||
+ | FOnClose.Unlock; | ||
+ | end; | ||
+ | end; | ||
+ | ... | ||
+ | constructor TWebsocketCommunicator.Create(AStream: TLockedSocketStream; | ||
+ | AMaskMessage: boolean; AssumeMaskedMessages: boolean); | ||
+ | begin | ||
+ | ... | ||
+ | FOnClose.Init(nil); | ||
+ | ... | ||
+ | end; | ||
+ | |||
+ | destructor TWebsocketCommunicator.Destroy; | ||
+ | begin | ||
+ | ... | ||
+ | FOnClose.Done; | ||
+ | inherited Destroy; | ||
+ | end; | ||
+ | |||
+ | procedure TWebsocketCommunicator.Close(ForceClose: boolean); | ||
+ | var | ||
+ | OnCloseEvent: TNotifyEvent; | ||
+ | begin | ||
+ | ... | ||
+ | OnCloseEvent := OnClose; | ||
+ | if Assigned(OnCloseEvent) then | ||
+ | OnCloseEvent(Self); | ||
+ | ... | ||
+ | end; | ||
+ | </code> | ||
+ | |||
+ | Avec... | ||
+ | <code delphi LazWebsockets\src\wsutils.pas> | ||
+ | { TThreadedData } | ||
+ | |||
+ | generic TThreadedData<T> = record | ||
+ | public type PT = ^T; | ||
+ | private | ||
+ | FData: T; | ||
+ | FLock: TRTLCriticalSection; | ||
+ | public | ||
+ | procedure Init(const AValue: T); | ||
+ | procedure Done; | ||
+ | function Lock: PT; | ||
+ | procedure Unlock; | ||
+ | end; | ||
</code> | </code> | ||