AGB  ·  Datenschutz  ·  Impressum  







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

Verhalten von Threads

Ein Thema von faux · begonnen am 16. Sep 2005 · letzter Beitrag vom 16. Sep 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#1

Verhalten von Threads

  Alt 16. Sep 2005, 18:10
Hallo!

Frage:

Ich habe folgenen Thread (wieder mal, jaja... ):

Code:
  class SchleifenThread
  {
    public Thread Thread;
    #region Variablendeklaration
    public decimal UpperMaximum = 0;
    public string OutText, OutMD5;
    private char[] valueString;
    private int count = 0;
    private readonly char startChr = 'A', endChr = 'Z';
    #endregion
    public SchleifenThread()
    {
      this.valueString = new char[128];
      for (int i = 0; i < 128; i++)
        this.valueString[i] = this.startChr;
      this.valueString[0]--;
      this.Thread = new Thread(new ThreadStart(Execute));
    }
    void Execute()
    {
      string Output;
      ListViewItem ActualItem;
      MD5 md5 = new MD5CryptoServiceProvider();
      #region Schleife
      [...]
      #endregion
    }
  }
Frage 1:
Wenn ich SchleifenThread.Thread.Start(); mache, startet der Thread - klar. Was passiert, NACHDEM die Prozedurch Execute durchlaufen wurde?

Frage 2:
Wie kann ich den Thread pausieren bzw Stoppen? (von Suspend() und Resume() rät mir VS05 mit einer Warnung ab).

Danke schon mal.
Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Verhalten von Threads

  Alt 16. Sep 2005, 18:41
Ich kappier eines nicht:

Nachdem ich den Thread zum ersten mal Starte, ruft er Execute() auf. Danach setzt er sich auf "Stopped". Wiekann ich ihn jetzt dazu bringen, dass er die Prozedur Execute() nochmal ausführt?
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Verhalten von Threads

  Alt 16. Sep 2005, 18:44
In dem du ihn neu startest.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von phXql
phXql

Registriert seit: 11. Mär 2004
Ort: Mühldorf
824 Beiträge
 
#4

Re: Verhalten von Threads

  Alt 16. Sep 2005, 18:45
Zitat von faux:
Ich kappier eines nicht:

Nachdem ich den Thread zum ersten mal Starte, ruft er Execute() auf. Danach setzt er sich auf "Stopped". Wiekann ich ihn jetzt dazu bringen, dass er die Prozedur Execute() nochmal ausführt?
in execute eine endlosschleife implementieren.

Delphi-Quellcode:
while(!Terminated)
{

}
"Dunkel die andere Seite ist"
"Yoda! Halts Maul und iss deinen Toast!"
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Verhalten von Threads

  Alt 16. Sep 2005, 18:47
Aus dem ThreadState "Stopped" bekommt man ihn nicht wieder "raus" also in Running?
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#6

Re: Verhalten von Threads

  Alt 16. Sep 2005, 18:51
Ohne es ausprobiert zu haben: Einfach nochmal Start aufrufen, das setzt ihn wieder auf "Running".
Was nörgelt VS über Suspend?
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Verhalten von Threads

  Alt 16. Sep 2005, 18:55
Also wenn er "Stopped" ist, und ich Starte ihn, sagt VS, dass er bereits gestartet ist. Das versuchte ich als erstes. Der einzige State, der ein Start() verlangt ist "Unstarted"....

Warnung vom Visual Studio 2005:
'System.Threading.Thread.Suspend()' is obsolete: 'Thread.Suspend has been deprecated. Please use other classes in System.Threading, such as Monitor, Mutex, Event, and Semaphore, to synchronize Threads or protect resources. http://go.microsoft.com/fwlink/?linkid=14202'
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#8

Re: Verhalten von Threads

  Alt 16. Sep 2005, 19:20
Zitat von faux:
Warnung vom Visual Studio 2005:
'System.Threading.Thread.Suspend()' is obsolete: 'Thread.Suspend has been deprecated. Please use other classes in System.Threading, such as Monitor, Mutex, Event, and Semaphore, to synchronize Threads or protect resources. http://go.microsoft.com/fwlink/?linkid=14202'
Da scheint sich in .NET 2.0 einiges geändert zu haben, ich kann dir deshalb mit 1.1 nicht weiter helfen.

Zum Neustarten: Geht wohl nur durch eine neue Instanz.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Verhalten von Threads

  Alt 16. Sep 2005, 19:23
Zitat von Khabarakh:
Zum Neustarten: Geht wohl nur durch eine neue Instanz.
Also die Alte verwerfen und eine neue machen?

Dumme Frage:
Wie geht das in .NET?

In Delphi Win32 macht man das mit Free und dann einfach neu Create, aber in .NET gibts IMHO kein Free (oä.) mehr, oder liege ich da falsch?!

Oder kann ich meine Instanz mit einer Zuweisung von "new SchleifenThread();" einfach überschreiben?
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#10

Re: Verhalten von Threads

  Alt 16. Sep 2005, 19:31
Ja, sobald keine Referenz auf eine Instanz mehr existiert, schnappt sich der Garbage Collector diese und gibt sie frei. Der GC läuft aber in einem eigenen Thread, er muss nicht sofort die Instanz freigeben, da kann schon noch etwas Zeit vergehen.

[add]
Zitat:
Oder kann ich meine Instanz mit einer Zuweisung von "new SchleifenThread();" einfach überschreiben?
Sollte gehen, der GC kümmert sich um die alte Instanz, da du der Variablen eine neue Referenz zuweist. [/add]
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:18 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