AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TEvent unter iOS

Ein Thema von CHackbart · begonnen am 21. Nov 2017 · letzter Beitrag vom 27. Nov 2017
Antwort Antwort
CHackbart

Registriert seit: 22. Okt 2012
267 Beiträge
 
#1

TEvent unter iOS

  Alt 21. Nov 2017, 20:36
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
  Mit Zitat antworten Zitat
Benutzerbild von MEissing
MEissing

Registriert seit: 19. Jan 2005
Ort: Egelsbach
1.384 Beiträge
 
Delphi 12 Athens
 
#2

AW: TEvent unter iOS

  Alt 22. Nov 2017, 13:11
Kann ich hier unter Delphi 10.2.1 (mit iOS 11 Patch) nicht nachvollziehen.... funktioniert genauso, wie unter Windows, ....

Timeout -> "Set" -> Signaled -> "Reset" -> Timeout
img_0025.jpg img_0026.jpg
Matthias Eißing
cu://Matthias.Eißing.de [Embarcadero]
Kein Support per PN
  Mit Zitat antworten Zitat
CHackbart

Registriert seit: 22. Okt 2012
267 Beiträge
 
#3

AW: TEvent unter iOS

  Alt 22. Nov 2017, 21:20
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
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: TEvent unter iOS

  Alt 26. Nov 2017, 13:34
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
  Mit Zitat antworten Zitat
CHackbart

Registriert seit: 22. Okt 2012
267 Beiträge
 
#5

AW: TEvent unter iOS

  Alt 27. Nov 2017, 10:20
Das war der Post hier: http://www.delphipraxis.net/174936-i...titasking.html

Christian
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: TEvent unter iOS

  Alt 27. Nov 2017, 10:50
Dann hast Du das nicht gelesen...:

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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:09 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