AGB  ·  Datenschutz  ·  Impressum  







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

DLL Callback und Threads..

Ein Thema von Whookie · begonnen am 7. Okt 2024 · letzter Beitrag vom 7. Okt 2024
Antwort Antwort
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
445 Beiträge
 
Delphi 10.3 Rio
 
#1

DLL Callback und Threads..

  Alt 7. Okt 2024, 13:04
Ich hätte eine Designfrage zu einer neuen DLL an der ich gerade arbeite:

Dazu muss ich sagen, das ich bisher bereits länger eine einsetze die auf Basis von Postmessage arbeitet (mit eigenem Fenster im Hintergrund) und daraus Callbacks durchführt.

Die DLL hat eine reine C-Schnittstelle (damit sie aus jeder Programmierumgebung verwendet werden kann) und das soll auch so bleiben. Ich brauche sie aber u.U. auch für Linux und daher dachte ich ich setze das mit der Delphi Threading-Unterstützung um (ich hoffe wenn ich auf reine Boardmittel setze funktioniert das auch? Kann das jemand bestätigen?). Bisher habe ich meine Threads selber verwaltet und auf Delphi-Klassen komplett verzichtet.
Die DLL erlaubt es Verbindung mit externen Geräten aufzunehmen, für jedes wird dann ein Thread erzeugt, der die Kommunikation mit dem Gerät durchführt und etwaige Resultate per Callback zurückgibt.

Mit meiner reinen Delphi-Variante funktioniert das auch bereits "einigermaßen", leider muss man ja, damit die Synchronisierung funktioniert von außen im OnIdle (so mach ich das aktuell über eine exportierte Funktion) CheckSynchronize() aufrufen. Das ist für Delphi-Lösungen vermutlich akzeptabel, aber aus anderen Umgebungen heraus eventuell schwierig?

Die Fragen die ich habe:
Ist das bereits die beste Umsetzungsmöglichkeit?
Funktioniert das auch unter Linux (meine Linuxerfahrung bisher erschöpft sich an der Kommandozeile)?
Gibt es Vorschläge, wie man das verbessern/besser umsetzen kann?
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: DLL Callback und Threads..

  Alt 7. Okt 2024, 13:42
Das funktioniert unter Linux grundsätzlich genauso, allerdings brauchst du eine andere Quelle für den Aufruf von CheckSynchronize, da es dort WM_IDLE nicht gibt. Das kann z.B. in einem Timer passieren.

Ansonsten funktioniert das Threading mit TThread usw. auch unter Linux.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#3

AW: DLL Callback und Threads..

  Alt 7. Okt 2024, 13:59
Aber sollte CheckSynchronize vom FMX nicht auch selbst ausgeführt werden?

beim Verarbeiten von Messages, bzw. nachdem das SyncEvent TThread.Synchronize, bzw. Queue, getriggert wird.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
445 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: DLL Callback und Threads..

  Alt 7. Okt 2024, 14:05
Das funktioniert unter Linux grundsätzlich genauso, allerdings brauchst du eine andere Quelle für den Aufruf von CheckSynchronize, da es dort WM_IDLE nicht gibt. Das kann z.B. in einem Timer passieren.

Ansonsten funktioniert das Threading mit TThread usw. auch unter Linux.
Das klingt schon mal super. Linux würde ich nicht selber implementieren sondiern die .so weitergeben. Ich müsste dann in der Doku vorgeben, das für Linux ein Timer mit (200ms??) eingesetzt werden muss, der dann meine dllCheckSynchronize() funktion aufruft (und das wiederholt solange sie True zurück liefert)?
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
445 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: DLL Callback und Threads..

  Alt 7. Okt 2024, 14:08
Aber sollte CheckSynchronize vom FMX nicht auch selbst ausgeführt werden?

beim Verarbeiten von Messages, bzw. nachdem das SyncEvent TThread.Synchronize, bzw. Queue, getriggert wird.
Das ganze ist GUI los. Eine DLL die ein paar Funktionen zur Verfügung stellt ...
Soweit ich das bisher beobachten konnte, bleibt Queue() in einer DLL einfach hängen, wenn der Aufruf nicht erfolgt (eigen Kopie der RTL, soweit ich das verstanden habe)
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
445 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: DLL Callback und Threads..

  Alt 7. Okt 2024, 14:15
Im Prinzip sieht mein Thread etwa so aus:

Delphi-Quellcode:
procedure TDeviceThread.Execute;
begin
  while not Terminated do
  begin
    case fInQueue.PopItem(LSize, LItem) of
      wrSignaled: Begin
        // do something more with it (send/receive data)
        DoRequest(LItem); // Block till timeout or answer received
        fOutQueue.PushItem(LItem);
        Queue(DeliverItem);
      End;
      wrTimeout: Begin
        // every 200ms check if some internal handling is needed
      end;
    end
  end;
end;
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#7

AW: DLL Callback und Threads..

  Alt 7. Okt 2024, 14:22
Ich dachte das TThread.Synchronize/Queue innerhalb der Anwendung, in der Callback-Prozedur, welche von der DLL aus aufgerufen wird.
Da es system-unabhängig sein soll, kann darf Dieses auch nicht innerhalb der DLL gemacht werden.

Achso, ja, das muß auch hängen bleiben, selbst im Windows/VCL.
Dieses arbeitet über Messages, mit einer globalen Liste und einem globalen Event (im Windows), was nicht funktionieren kann, wenn die DLL ist eigenen globalen Listen/Objekte besitzt, da sie ohne Laufzeitpackages eine eigen Kopie der RTL besitzen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  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 14:29 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