Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   C# Thread Testanwendung (https://www.delphipraxis.net/53279-thread-testanwendung.html)

faux 13. Sep 2005 14:43


Thread Testanwendung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!

Ich versuche mich gerade in Threads einzuarbeiten. Da das noch nicht so richtig klappt, habe ich mal eine Beispielanwendung geschrieben, die nur einen simplen Thread enthält.
Könnte sich das irgendwer schnell ansehen, und mir sagen, was man da anders machen sollte und so?

Hier der Code:
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace Thread_Test
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      MyThread MyInstance = new MyThread();
      label1.Text = "Gestartet";
      while (MyInstance.Thread.IsAlive)
      {
        textBox1.Text = MyInstance.Output;
        Application.DoEvents();
      }
      MyInstance.Thread.Join();
      label1.Text = "Beendet";
      textBox1.Text = MyInstance.Output;
    }
  }
  public class MyThread
  {
    public Thread Thread;
    public string Output;

    public MyThread()
    {
      this.Thread = new Thread(new ThreadStart(Execute));
      this.Thread.Start();
    }
    void Execute()
    {
      for (int i = 1; i <= 5e6; i++)
      {
        Output = i.ToString();
      }
    }
  }
}
Das Formular besteht aus: label1, textBox1, button1.

Danke schon mal.

Grüße
Faux

faux 16. Sep 2005 17:34

Re: Thread Testanwendung
 
Heißt das, das Niemand antwortet daran, dass keiner versteht was ich will, ich keinen fehlergemacht habe, oder keiner Lust zum Antworten hat?

Grüße
Faux

Dax 16. Sep 2005 17:39

Re: Thread Testanwendung
 
Nun, was ist denn das Problem? Läuft der Thread erst gar nicht, bricht er mit fehlermeldung ab, ... ?

faux 16. Sep 2005 17:44

Re: Thread Testanwendung
 
Es gibt kein Problem. Alles läuft besten, nur wollte ich wissen, ob die Klasse so passt wie sie ist, oder ob ich vielleicht statt public ein private oä. machen soll (nur ein Bsp.).
Denn wenn das so passt, mache ich das jetzt in mehrere Programme rein, wenn mir dann aber in einem Monat wer sagt, dass das und das anders ginge, wär das viel Arbeit zum Ändern.. ;)

Faux

Dax 16. Sep 2005 17:46

Re: Thread Testanwendung
 
Code:
public Thread Thread;
public string Output;
Das sind ja Public-Felder :shock: Für solche Sachen nimmt man private Felder und ReadOnly-Properties ;)

Speedmaster 16. Sep 2005 17:48

Re: Thread Testanwendung
 
Zitat:

Zitat von Dax
Code:
public Thread Thread;
public string Output;
Das sind ja Public-Felder :shock: Für solche Sachen nimmt man private Felder und ReadOnly-Properties ;)

Definitiv nicht das Thema!

Allerdings ändere mal den namen deines Threads, von mir aus in thread!

faux 16. Sep 2005 17:49

Re: Thread Testanwendung
 
Zitat:

Zitat von Speedmaster
Definitiv nicht das Thema!

Doch! *g*
GENAU das, wollte ich wissen.

@Dax: Einspruch: Wie könnte ich den Thread dann Stoppen und/oder das Ergebnis auslesen???

Zitat:

Zitat von Speedmaster
Allerdings ändere mal den namen deines Threads, von mir aus in thread!

Was passt an Thread Testanwendung nicht? Steckt ja auch sogar das Wort Thread drinnen... :?

Khabarakh 16. Sep 2005 18:23

Re: Thread Testanwendung
 
Zitat:

Zitat von faux
@Dax: Einspruch: Wie könnte ich den Thread dann Stoppen und/oder das Ergebnis auslesen???

Das Ergebnis kannst du doch auslesen, eben weil es eine Read-Only-Property ist :wink: . Und für Referenzvariablen reicht Read-Only, um auf alle Member zugreifen zu können. Oder willst du der Property andere Instanzen zuweisen?

[add]Ich denke, Speedmaster meint den Namen der Public-Variable. [/add]

faux 16. Sep 2005 18:25

Re: Thread Testanwendung
 
Aber Dax meine, dass ich sie private UND readonly machen soll. Und als Private kann ich dann von außen nix machen.
Nein ich will dem Thread keine andere Instanz zuweisen.

Khabarakh 16. Sep 2005 18:28

Re: Thread Testanwendung
 
Zitat:

Zitat von Dax
[...] private Felder und ReadOnly-Properties

Das Feld soll private sein, die Property ist natürlich public :wink: .

faux 16. Sep 2005 18:34

Re: Thread Testanwendung
 
Zitat:

Zitat von Khabarakh
Das Feld soll private sein

Dann kann ich den Thread aber nicht steuern:

SchleifenThread.Thread.Start();

Oder meinst du was anderes?

Khabarakh 16. Sep 2005 18:42

Re: Thread Testanwendung
 
Zitat:

Zitat von faux
Zitat:

Zitat von Khabarakh
Das Feld soll private sein

Dann kann ich den Thread aber nicht steuern:

SchleifenThread.Thread.Start();

Oder meinst du was anderes?

Von außen steuerst du den Thread über die public Property. Eine andere Idee, mit der du von außen auf den Thread gar nicht zugreifen musst: Du löst in Execute ein Event aus, ist wahrscheinlich sinnvoller.

faux 16. Sep 2005 18:43

Re: Thread Testanwendung
 
Ich kappir das grad garnicht, sorry.
Kannst du mir ein kurzes Bsp geben?

Speedmaster 16. Sep 2005 18:47

Re: Thread Testanwendung
 
Delphi-Quellcode:
public Thread Thread;
Du gibst einem Thread den Namen "Thread", das kann zu Problemen führen, zumindestens hatte ich öfters Probleme damit! Die Instanz sollte sich wenn möglich immer anderst nennen! Natürlich geht es, aber du findest sowas auch in keinem MS Beispiel!

faux 16. Sep 2005 18:48

Re: Thread Testanwendung
 
Zitat:

Zitat von Speedmaster
Delphi-Quellcode:
public Thread Thread;
Du gibst einem Thread den Namen "Thread", das kann zu Problemen führen, zumindestens hatte ich öfters Probleme damit! Die Instanz sollte sich wenn möglich immer anderst nennen! Natürlich geht es, aber du findest sowas auch in keinem MS Beispiel!

Aber ich werde wohl kaum in der einen Klasse eine Variable ebenfalls Thread nennen.. ;)

Außerdem wird dieses "Feature" ausdrücklich von C# unterstützt... ;)

Ich habs nur der Übersicht her gemacht. Wäre ja unlogisch, wenn der Thread "MeinThread" heißt, obwohl er auch Thread heißen kann... IMHO

Khabarakh 16. Sep 2005 19:00

Re: Thread Testanwendung
 
Code:
   class ThreadingClass
   {
      private Thread thread;
      
      public Thread InnerThread
      {
         get
         {
            return thread;   
         }
      }
   }
Reden wir überhaupt noch vom selben *g* ?

faux 16. Sep 2005 19:09

Re: Thread Testanwendung
 
OK, ich hab mich etwas seltsam ausgedrückt:

Ich benutze einen Thread, um MD5-Werte zu berechnen. Und zwar von einer Reihe von Strings (A, B, ... Z, AA, AB, ..., AZ, BA, ... ZZZZZZ). Wie weit, kann der Benutzer einstellen. Ich erzeuge die Strings in einer FOR-Schleife. Dort berechne ich auch gleich den MD5 dazu.
Jedenfalls will ich, dass diese Schleife in einen Thread ausgelagert wird.
Jetzt das Problem. Beim Klick auf den Start - Button, Starte ich den Thread. Der Rechnet dann vorsich hin. Jetzt will ich 1. mit einem Pause-Button den Thread pausieren und nachher ev. fortsetzen. Auch das Stoppen des Threads ist möglich.
Nachdem der Thread mit der Schleife fertig ist, geht er in den Modus "Stopped" (NICHT "Unstarted"). Trotzdem soll ein erneutes Aufrufen des Threads möglich sein.

Wie kann ich das Realisieren?
Mein Thread ist der aus dem Thread http://www.delphipraxis.net/internal...ct.php?t=63684.

faux 16. Sep 2005 19:39

Re: Thread Testanwendung
 
OK, Da sich zwei unterschiedliche Threads irgendwie im Thema überschnitten haben, ist der hier überflüssig.. ;)

Danke für die Hilfe nochmal ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:55 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