Einzelnen Beitrag anzeigen

Frickeldrecktuxer_TM
(Gast)

n/a Beiträge
 
#31

Re: Synchronisierung von Subthreads (VCL) + Pointerzugriff

  Alt 28. Apr 2006, 22:27
Zitat von Delphi-Freak:
Aha! Aber gibt es auch was einfacheres, außer jetzt alle Methoden nochmals zu implementieren? Also dass man das gleich für alle Methoden einer Klasse macht? Anscheinend nicht - oder doch
Wer hat denn was von Reimplementieren gesagt?

Schnell zusammengetippt und daher mit 100%iger Wahrscheinlichkeit die falschen Bezeichner, aber die kannst du ja in der Online-Hilfe nachschlagen, sieh mir nach, daß ich als Gelegenheits-mit-Delphi-Entwickler nicht alle Klassen der VCL auswendig kenne
Delphi-Quellcode:
type
  TSomeThread = class(TThread)
    // ...
    private
      FIDIrgendwas: TIDIrgendwas;
  end;

constructor TSomeThread.Create(...);
begin
  inherited;
  FIDIrgendwas := TIDIrgendwas.Create;
end;

procedure TSomeThread.MessageHandler(Message: TMessage); // oder so
begin
  case Message.MsgType of // oder so
    STM_CONNECT
    begin
      FIDIrgendwas.Connect(...);
      // fertig, schicke eine Benachrichtigung an den Hauptthread
    end;

    STM_GET
    begin
      FIDIrgendwas.Get(...);
      // fertig, schicke eine Benachrichtigung an den Hauptthread
    end;
  end;
end;

procedure TSomeThread.Execute(...);
begin
  // Nachrichtenschleife
end;
Und damit die Handler wissen, was zu tun ist, solltest du die die beiden Datenfelder einer Message anschauen. Das sind zwar nur zwei LongWords, aber du kannst einen Pointer zu einem Integer casten, deswegen kannst du beliebig viele Informationen übergeben, indem du einfach einen Record deklarierst, die Daten dort reinpackst und einen Pointer auf den Record an die Nachricht hängst. Casten ist zwar weder schön noch hübsch, aber bei einer C-API, wie Windows nunmal eine hat, leider nicht immer zu vermeiden.
  Mit Zitat antworten Zitat