AGB  ·  Datenschutz  ·  Impressum  







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

Thread in DLL suspendieren

Ein Thema von Blubbels · begonnen am 15. Jan 2009 · letzter Beitrag vom 30. Jan 2009
 
Blubbels

Registriert seit: 21. Okt 2008
8 Beiträge
 
#5

Re: Thread in DLL suspendieren

  Alt 30. Jan 2009, 08:58
Ihr seid beide schonmal virtuelles Gold wert, danke

@DMW: Ja das hatte ich auch schon gelesen

Und mehrfach drüber gegrübelt, zugegeben!

Primärzweck ist nicht Debuggen, sondern Userkomfort (rechenintensiven Vorgang pausieren), aber der Begriff Primärzweck sagt ja noch nicht aus, daß das die einzige Nutzung sein darf.

"It is not intended to be used for thread synchronization." ist auch klar. Benutze ich auch nicht dafür - synchronisieren tue ich über critical sections.

Hinauslaufen tut das dann vermutlich auf:
Zitat:
should signal the other thread to suspend itself. The target thread must be designed to watch for this signal and respond appropriately.
Auch das habe ich eigentlich umgesetzt, indem ich das Betreten und Verlassen der Critical Section mit einem Event kombiniere, auf den ich vor dem Pausieren warte und es nach Timeout gar skippe:

Delphi-Quellcode:
procedure ThreadEnterCritical;
begin
   CritialThreadEvent.ResetEvent;
   CritialThreadSection.Enter;
end;

procedure ThreadLeaveCritical;
begin
   CritialThreadSection.Leave;
   CritialThreadEvent.SetEvent;
end;

function IsInThreadCritical(const TimeOut: cardinal): boolean;
begin
   Result := (CritialThreadEvent.WaitFor(TimeOut)=wrTimeout);
end;
IsInThreadCritical ist halt im Code im ersten Post als Abbruchbedingung noch hinzugefügt.
Hmmm... mache ich da gerade etwas dummes fällt mir so auf, brauche ich evtl. eine zweite TEvent-Instanz für den Event, um in IsInThreadCritical von außen zu prüfen?

Könnte ich das sonst irgendwie besser machen, hab ich die MSDN-Empfehlung da falsch verstanden?
Genau genommen steht da ja drin, dem Thread selber zu signalisieren, davor hatte ich etwas zurückgeschreckt, weil mich schon das ewige "if not Terminated" ziemlich annervt und ich es für unschön empfinde

@sirius: auf threadinterne Variablen greif ich von außen eh nicht zu, genausowenig wie auf threadöffentliche Die sind tabu, solange der Thread nicht terminiert ist, ganz klar, da gibt es nur einseitige Kommunikation, nämlich Ereignisse (Synchronize/CriticalSection). Direkt eingebunden ist das ja auch alles sauber genug, um sich nicht eben so aufzuhängen.

Der Thread verarbeitet größere Dateien, Kein Netzwerk, keine Datenbank, kein COM (hmmm das könnte ich nochmal genauer prüfen!) oder sonstwas spektakuläres, aber immerhin soviel Code, daß ich nach einem genervten Tag der Suche erstmal wieder hier fragen wolte, ob ich was generelles übersehe

Die kleine Endlosschleife klappt übrigens problemlos, ja, das hatte ich schon getestet

Auch Dir ein Danke für den Hinweis bzgl. des Pausierens von außerhalb. Wie oben geschrieben hatte ich eigentlich gedacht ich hätte das mit dem Event abgedeckt, aber sollte mir dann wohl noch ein echtes internes Pausesystem überlegen?
  Mit Zitat antworten Zitat
 


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 08:17 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