Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   TEvent unter iOS (https://www.delphipraxis.net/194447-tevent-unter-ios.html)

CHackbart 21. Nov 2017 19:36

TEvent unter iOS
 
Hi,

ich wollte keine Leichenfledderei betreiben und den Thread von Mavarik herauskamen, aber mir ist da ein Fehler unter 10.2 aufgefallen:

Code:
unit UMain;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes,
  System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  FMX.Controls.Presentation, System.SyncObjs;

type
  TForm3 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
    FEvent: TEvent;
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;

implementation

{$R *.fmx}

procedure TForm3.Button1Click(Sender: TObject);
begin
 // if FEvent.WaitFor(0) <> TWaitresult.wrSignaled then
    FEvent.SetEvent;
end;

procedure TForm3.Button2Click(Sender: TObject);
begin
  //if FEvent.WaitFor(0) = TWaitresult.wrSignaled then
    FEvent.ResetEvent;
end;

procedure TForm3.FormCreate(Sender: TObject);
begin
  FEvent := TEvent.Create(nil, true, false, '');
end;

procedure TForm3.FormDestroy(Sender: TObject);
begin
  FEvent.Free;
end;

procedure TForm3.Timer1Timer(Sender: TObject);
begin
  case FEvent.WaitFor(0) of
    wrSignaled:
      Label1.Text := 'Signaled';
    wrTimeout:
      Label1.Text := 'Timeout';
    wrAbandoned:
      Label1.Text := 'Abandoned';
    wrError:
      Label1.Text := 'Error';
    wrIOCompletion:
      Label1.Text := 'IOCompletion';
  end;
end;
Wenn ich TEvent verwende klappt das unter Android wie unter Windows korrekt. In iOS verhält sich das ganze aber komisch. Klicke ich in obigen Beispiel 5x auf Button1, muss ich hinterher 5x auf Button2 klicken, damit Event wieder zurückgesetzt wird.
Kann das jemand eventuell verifizieren?

Christian

MEissing 22. Nov 2017 12:11

AW: TEvent unter iOS
 
Liste der Anhänge anzeigen (Anzahl: 2)
Kann ich hier unter Delphi 10.2.1 (mit iOS 11 Patch) nicht nachvollziehen.... funktioniert genauso, wie unter Windows, ....

Timeout -> "Set" -> Signaled -> "Reset" -> Timeout
Anhang 48153 Anhang 48152

CHackbart 22. Nov 2017 20:20

AW: TEvent unter iOS
 
Danke für die Rückmeldung. Die Konfiguration hier ist die selbe.

Wenn ich hier x-Mal auf SetEvent klicke, muss ich allerdings x-Mal auch auf ResetEvent klicken, damit das wieder stimmt.

Aufgefallen ist mir das eigentlich nur, da mein Ringpuffer, der über ein Abort-Event gestoppt und fortgesetzt wird unter iOS nicht lief. Ich hab vorsorglich eingebaut.

Code:
function Check(Event: TEvent): Boolean;inline;
begin
  result := Event.WaitFor(0) = wrSignaled;
end;

procedure TDataCache.SetAbort(abort: Boolean);
begin
{$IFDEF IOS}
  if Check(ev_abort)=abort then exit;
{$ENDIF}

  if (abort) then
    ev_abort.SetEvent()
  else
    ev_abort.ResetEvent();
end;
Christian

Mavarik 26. Nov 2017 12:34

AW: TEvent unter iOS
 
hmm... Ein Thread von mir?

Ich habe kein Problem mit TEvent auf iOS, Android oder Windows...

Das gilt auch für alle Delphi Versionen - soweit ich mich erinnern kann...

Mavarik

CHackbart 27. Nov 2017 09:20

AW: TEvent unter iOS
 
Das war der Post hier: http://www.delphipraxis.net/174936-i...titasking.html

Christian

Mavarik 27. Nov 2017 09:50

AW: TEvent unter iOS
 
Zitat:

Zitat von CHackbart (Beitrag 1387230)

Dann hast Du das nicht gelesen...:

Zitat:

Zitat von Mavarik (Beitrag 1219820)
OK... Es geht doch...

Der Compiler akzeptiert zwar

Delphi-Quellcode:
var
  E : TEvent;
begin
  E := TEvent.Create;
  E.ResetEvent;
...
end;
Aber es funktioniert nur mit:

Delphi-Quellcode:
var
  E : TEvent;
begin
  E := TEvent.Create(NIL,true,true,''); // <---
  E.ResetEvent;
...
end;
Das war der Trick!

Grüsse Mavarik



Alle Zeitangaben in WEZ +1. Es ist jetzt 00:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz