AGB  ·  Datenschutz  ·  Impressum  







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

In Thread auf Event warten

Ein Thema von Björn Ole · begonnen am 12. Dez 2009 · letzter Beitrag vom 13. Dez 2009
Antwort Antwort
Benutzerbild von Björn Ole
Björn Ole

Registriert seit: 11. Jul 2008
166 Beiträge
 
Delphi XE Professional
 
#1

In Thread auf Event warten

  Alt 12. Dez 2009, 16:10
Servus,

ich machs kurz: In einer DLL wird ein Thread erstellt, in dem ich wiederum ein Object erstelle, auf dessen Ereignisse ich reagieren möchte.
Ansonsten hat der Thread keine weiteren Aufgaben, ich möchte praktisch nur ressourcenschonend auf Ereignisse warten.
Basteleien mit WaitForSingleObject in Verbindung mit CreateEvent und SetEvent haben ins Leere geführt.

Wie macht man das richtig?


Delphi-Quellcode:
library MyObjProject;

uses
  Classes;

{$R *.res}

type
  TMyThread = class(TThread)
  private
    Obj: TMyObj;
    procedure OnSomeEvent;
  protected
    procedure Execute; override;
  end;

{ TMyThread }

procedure TMyThread.Execute;
begin
  Obj := TObject.Create;
  {jetzt arbeitet das Object}
  {Eventhandler zuweisen}
  Obj.OnSomeEvent := OnSomeEvent;
  {hier jetzt auf Events warten... nur wie?}
end;

procedure TMyThread.OnSomeEvent;
begin
  {...}
end;

begin
  TMyThread.Create(false);
end.
Danke schonmal.
Björn
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: In Thread auf Event warten

  Alt 12. Dez 2009, 17:13
Das hängt von deinem Objekt ab. Was macht es denn?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Björn Ole
Björn Ole

Registriert seit: 11. Jul 2008
166 Beiträge
 
Delphi XE Professional
 
#3

Re: In Thread auf Event warten

  Alt 12. Dez 2009, 17:34
Es empfängt WM_DEVICECHANGE Nachrichten und löst ein Event bei USB Geräteanschluss/-entfernung aus (ähnlich diesem Code).
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: In Thread auf Event warten

  Alt 12. Dez 2009, 18:30
Dann baust du eine Messageschleife:
Delphi-Quellcode:
while getmessage(msg,0,0,0) do //msg von Typ TMsg
  dispatchmessage(msg);
Achte darauf, dass du die Methode Terminate redefinierst und darin Postthreadmessage mit WM_Quit sendest.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Björn Ole
Björn Ole

Registriert seit: 11. Jul 2008
166 Beiträge
 
Delphi XE Professional
 
#5

Re: In Thread auf Event warten

  Alt 12. Dez 2009, 22:41
Danke, die Nachrichtenschleife läuft!
Meinst du das mit PostThreadMessage so in etwa?

Delphi-Quellcode:
type
  TMyThread = class(TThread)
  {...} 
  protected
    procedure Terminate;
  end;

{ TMyThread }

{...}

procedure TMyThread.Terminate;
begin
  PostThreadMessage(Self.ThreadID, WM_QUIT, 0, 0);
  inherited Terminate;
end;
Und warum braucht man das? Warum die Schleife nicht so:

Delphi-Quellcode:
while (not Terminated) and GetMessage(Msg, 0, 0, 0) do
  DispatchMessage(Msg);
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: In Thread auf Event warten

  Alt 12. Dez 2009, 23:43
Ja, so meine ich das. Und das braucht man, weil GetMessage blockierend ist und nur zurückkommt, wenn eine asynchrone Message gesendet wurde. Nun kann man naürlich nach einem terminate warten, bis irgendeine Komponente in dem Thread diese bekommt oder man erzwingt sie, damit alles recht flott geht.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Björn Ole
Björn Ole

Registriert seit: 11. Jul 2008
166 Beiträge
 
Delphi XE Professional
 
#7

Re: In Thread auf Event warten

  Alt 13. Dez 2009, 00:04
Super, danke für Deine Hilfe!
  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:56 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