AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Schlafende Threads

Ein Thema von shmia · begonnen am 11. Mai 2012 · letzter Beitrag vom 15. Mai 2012
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von sirius
sirius

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

AW: Schlafende Threads

  Alt 14. Mai 2012, 08:21
Hi brechi,

Das Terminate in den Destructor zu setzen gefällt mir auch.

Aber den geerebten Constructor kannst du auch am Anfang aufrufen. Das ist ein Märchen, dass bei TThread das inherited am Ende des Constructors sitzen muss. Der Thread wird eh erst in der überschriebenen Methode "AfterConstruction" gestartet (sofern createsuspended=false), also erst wenn der komplette Code des Constructors abgearbeitet ist.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.511 Beiträge
 
Delphi 5 Professional
 
#12

AW: Schlafende Threads

  Alt 14. Mai 2012, 16:19
Der Thread wird eh erst in der überschriebenen Methode "AfterConstruction" gestartet (sofern createsuspended=false), also erst wenn der komplette Code des Constructors abgearbeitet ist.
Für Delphi 5 scheint das aber nicht zu stimmen:
Delphi-Quellcode:
constructor TThread.Create(CreateSuspended: Boolean);
var
  Flags: DWORD;
begin
  inherited Create;
  AddThread;
  FSuspended := CreateSuspended;
  Flags := 0;
  if CreateSuspended then Flags := CREATE_SUSPENDED;
  FHandle := BeginThread(nil, 0, @ThreadProc, Pointer(Self), Flags, FThreadID); // <=====
end;
Also muss man wohl zuerst das Event erzeugen (oder man erzeugt es erst in Execute() und handelt sich dafür andere Probleme ein).

Irgendwie gefällt mir das auch alles nicht, wieso z.b. das ResetEvent vor DoWork?
Weil ja während DoWork noch abgearbeitet wird von Aussen ein neuer "WakeUp-Befehl" eintreffen könnte.
So richtig nützlich wird das Ganze erst, wenn man noch ein threadsicheren Fifo hinzunimmt, damit DoWork jedes Mal die richtigen Inputdaten bekommt.

Aber es scheint ja auch so schon schwierig genug einen TThread mit einem TSimpleEvent zu verheiraten.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
27.469 Beiträge
 
Delphi XE3 Professional
 
#13

AW: Schlafende Threads

  Alt 14. Mai 2012, 16:35
Jetzt weiß ich auch wieder, warum ich nur noch die Kompatibilität bis D7 und bei aktuellen Projekten nur noch bis maximal D2006 gewährleiste
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2013
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

AW: Schlafende Threads

  Alt 14. Mai 2012, 17:00
Für Delphi 5 scheint das aber nicht zu stimmen:
Daher kommt das immer. Ok in Delphi 7 wird im Constructor BeginThread immer CREATE_SUSPENDED aufgerufen und dann gibt es AfterConstruction:
Delphi-Quellcode:
procedure TThread.AfterConstruction;
begin
  if not FCreateSuspended then
    Resume;
end;
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.511 Beiträge
 
Delphi 5 Professional
 
#15

AW: Schlafende Threads

  Alt 15. Mai 2012, 16:43
Ich habe den Konstruktor jetzt so geändert:
Delphi-Quellcode:
constructor TSleepingThread.Create(CreateSuspended: Boolean);
begin
   inherited Create(True);
   FEvent := TSimpleEvent.Create;
   if not CreateSuspended then
      Resume;
end;
Ausserdem gibt es noch einen 2. Thread in dem Demo um es einfache Datenübergabe zu zeigen.
Andreas
  Mit Zitat antworten Zitat
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 · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2014 by Daniel R. Wolf