AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Windows Messages in FMX ?!

Ein Thema von arnold mueller · begonnen am 11. Sep 2011 · letzter Beitrag vom 26. Sep 2011
Antwort Antwort
Seite 1 von 2  1 2   
Robotiker
(Gast)

n/a Beiträge
 
#1

AW: Windows Messages in FMX ?!

  Alt 12. Sep 2011, 11:01
Wie funktioniert denn so generell Multithreading auf OSX?
In der XE2 Hilfe gibt es schon beim Beispiel zur C++ Konsolenanwendung einen Thread. Offensichtlich Posix-Threads, ganz ähnlich wie in Linux.

Ich wüsste derzeit auch spontan keine echte Alternative, ohne ein vom Compiler bereit gestelltes Threading-Framework, dass solche Mechaniken "magisch" bereit stellt, und je nach Plattform implementiert.
Da triffst du den Nagel auf den Kopf. Im C++ Builder sind Sachen wie boost::threading, boost::filesystem usw. vorhanden. Alternativen gibt es z.B. mit dem oben verlinkten Poco.

Bei Delphi stellt sich mir die Frage, will Emba das alles selber schreiben (in der RTL ?), soll man sich bei Free Pascal bedienen (wie machen die das), oder entwickelt die Community das ?

Tut mir leid, wenn ich euch etwas mit meinen Ausführungen zum C++ Builder nerve, aber die gleiche Thematik hat sich dort ja vor sieben Jahren auch gestellt ...

Bleibt bitte beim Thema. Es geht darum was man als Ersatz für Nachrichten unter Windows bei OSX nimmt. Und es geht nicht um Multithreading
Der Threadersteller nutzt doch bisher Windows-Messages zur Threadkommunikation. Und wenn man dafür einen portablen Ersatz sucht, kann man bei den Threads gleich weiter machen.

Geändert von Robotiker (12. Sep 2011 um 11:06 Uhr)
  Mit Zitat antworten Zitat
arnold mueller

Registriert seit: 27. Jul 2005
129 Beiträge
 
#2

AW: Windows Messages in FMX ?!

  Alt 12. Sep 2011, 14:39
Der Threadersteller nutzt doch bisher Windows-Messages zur Threadkommunikation. Und wenn man dafür einen portablen Ersatz sucht, kann man bei den Threads gleich weiter machen.
Nein es geht nicht primär um Threads hier, ich habe sie lediglich als Beispiel gebracht. Es ist mir klar das man die Synchronisation von Threads auch anders implementieren kann. TThread existiert auch unter Firemonkey (denke ich, ich habe bisher nur mit der Demo gespielt).

Wenn man auf das Hinzufügen von USB-Sticks reagieren will, wüsste ich gar nicht wie man das plattformübergreifend gestalten kann. Klar in der Windows-Welt mit WM_DEVICE_CHANGE. Aber unter OSX?
  Mit Zitat antworten Zitat
Robotiker
(Gast)

n/a Beiträge
 
#3

AW: Windows Messages in FMX ?!

  Alt 12. Sep 2011, 15:03
TThread existiert auch unter Firemonkey (denke ich, ich habe bisher nur mit der Demo gespielt).
TThread ist ja Teil der RTL und dafür heißt es in der Doku:

Zitat:
The RAD Studio run-time library (RTL) has been modified so that in most cases you can use the same RTL calls in all of your cross-platform applications (native Win32, Win64, and OS X applications).
Allerdings findet man wenig dazu, wo da die "most cases" aufhören.
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#4

AW: Windows Messages in FMX ?!

  Alt 12. Sep 2011, 16:10
nn
Wenn man auf das Hinzufügen von USB-Sticks reagieren will, wüsste ich gar nicht wie man das plattformübergreifend gestalten kann. Klar in der Windows-Welt mit WM_DEVICE_CHANGE. Aber unter OSX?
Das musst du dann abstrahieren.
Du hättest dann etwas, in das du Handler für diesen Event registrieren kannst. Wie der Event gefeuert wird, ist dir dann egal.
Ist sicher nicht was du hören willst, aber Embarcadero wird sicher keine RTL vom Umfang des .Net/Mono Frameworks bauen, um alle möglichen Eventualitäten zu kapseln.
solche Stellen im Code zu suchen und mit Abstraktionen zu verpacken ist generell eine gute Idee. Denn dann kannst du noch anderen Dinge tun, bevor der Event ausgelöst wird, oder danach. Was ansonsten irgendwo untergemoddert werden müsste.

Um beim Beispiel des Threadings zu bleiben: In OSX gibt es dafür Grand Central Dispatch. Und dafür gibt es anscheinend auch einen Windows-Port.
Das ist nicht direkt vergleichbar mit dem alten Threadpool, den schon unsere Großväter im Krieg benutzt haben.
GCD ist mehr eine Version der .Net Task parallel Library für native Code. D.h. du sagst was alles getan werden muss, und was vor wem getan werden muss. Und GCD kümmert sich darum, dass es möglichst zackig auf so vielen Kernen wie möglich passiert.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Robotiker
(Gast)

n/a Beiträge
 
#5

AW: Windows Messages in FMX ?!

  Alt 12. Sep 2011, 19:45
Ok, ich habe mich gerade mal etwas mit den Sourcen beschäftigt.

TThread z.B. ist offenbar bereits für Windows, MacOS und Linux implementiert. Dabei unterscheiden sich die Member, die die Klasse unter den einzelnen Plattformen hat, teilweise in Typ oder Name.

Die Hilfe beschränkt sich bei den Stichproben, die ich gemacht habe, leider immer meist auf Aussagen wie
Zitat:
Unter Win32 ist Priority ein TThread Priority-Wert. Die möglichen Werte sind in der Tabelle im Thema “Thread initialisieren” aufgeführt
das es unter MacOS und Linux ein Integer ist, muss man in den Quellen nachlesen:
Code:
{$IFDEF MSWINDOWS}
    function GetPriority: TThreadPriority; platform;
    procedure SetPriority(Value: TThreadPriority); platform;
{$ENDIF}
{$IFDEF POSIX}
    // ** Priority is an Integer value in Linux
    function GetPriority: Integer; platform;
    procedure SetPriority(Value: Integer); platform;
    function GetPolicy: Integer; platform;
    procedure SetPolicy(Value: Integer); platform;
{$ENDIF}
Offensichtlich hinkt die Hilfe der Implementierung noch hinterher, da ist noch etwas Forschung angesagt, was überall geht, was teilweise anders geht und was man selber machen muss.
  Mit Zitat antworten Zitat
arnold mueller

Registriert seit: 27. Jul 2005
129 Beiträge
 
#6

AW: Windows Messages in FMX ?!

  Alt 12. Sep 2011, 20:19
Das musst du dann abstrahieren.
Ja ok, aber dafür muss man doch wissen was OSX eigentlich macht (in dem Fall) - so grundsätzlich. Eine einfache Antwort a la mach dies oder das gibt es auf meine Frage scheinbar nicht. Also steht jetzt Grundlagenforschung an. Das es so etwas (ähnliches) wie Messages unter OSX nicht geben soll kann ich fast nicht glauben


at Robotiker: Die Compilerschalter sind schon seit XE vorhanden. Deshalb habe ich mir um Threads als solches keine Gedanken gemacht. Ich habe im Moment nur die Trial von XE2 zur Verfügung - leider ohne Sourcen sonst hätte ich schon längst in den Firemonkey Quellen gestöbert
  Mit Zitat antworten Zitat
Hisoka

Registriert seit: 2. Jan 2008
Ort: im Norden
53 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Windows Messages in FMX ?!

  Alt 12. Sep 2011, 21:00
Im klassischen Fall dürfte OSX wie Linux auch POSIX Threads nutzen. Ansonsten gibt es die NextStep Klasse NSThread und weiteres.

http://developer.apple.com/library/m...tySummary.html
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#8

AW: Windows Messages in FMX ?!

  Alt 12. Sep 2011, 21:27
Unter Linux gibt es Fenster-Nachrichten, nur scheinen die nicht sonderlich bekannt zu sein. Also müsste auch Mac was ähnliches haben.
Aber ich glaube nicht, dass man auf Mac/Linux einfach so Objekte per Fenster-Nachricht verschicken kann, wie unter Windows.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Hisoka

Registriert seit: 2. Jan 2008
Ort: im Norden
53 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Windows Messages in FMX ?!

  Alt 12. Sep 2011, 21:55
Unter Linux gibt es Fenster-Nachrichten, nur scheinen die nicht sonderlich bekannt zu sein. Also müsste auch Mac was ähnliches haben.
Aber ich glaube nicht, dass man auf Mac/Linux einfach so Objekte per Fenster-Nachricht verschicken kann, wie unter Windows.

Bernhard
naja, Unter Linux nutzt man klassischerweise DBus zum Austausch zwischen Anwendungen. unter OSX gibt es Notifications zum Austausch von Nachrichten zwischen Anwendungen:
http://developer.apple.com/library/m...thObjects.html
  Mit Zitat antworten Zitat
Robotiker
(Gast)

n/a Beiträge
 
#10

AW: Windows Messages in FMX ?!

  Alt 13. Sep 2011, 07:20
Im klassischen Fall dürfte OSX wie Linux auch POSIX Threads nutzen.
Die Posix-Threads sind in der Delphi RTL umgesetzt.

Aber beim Lesen habe ich noch was entdeckt:

In der Hilfe steht, dass bei Verbindung mit dem Entwicklungs-Mac dessen Headerdateien und Libs auf dem Windows PC kopiert werden. Eine C++ Builder Anwendung kann die dann direkt benutzen.

Also ist der neue Cross-Plattform Ansatz in Wirklichkeit dreischichtig. An der Oberfläche FireMonkey, darunter die Delphi RTL und ganz unten der auf nativen C/C++ basierende Ansatz aus dem C++ BuilderX.

Wie eine Delphi-Anwendung jenseits der RTL an die API des Zielsystems kommt, ist mir nicht ganz klar. Offenbar durch manuelle Headerübersetzung. Das wird im Vollausbau Win/Mac/Linux ja richtig heftig.

Grüße

Robotiker
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 13:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz