WinFuture-Forum.de: [c#] Ein Paar Fragen Zum Multithreading - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

[c#] Ein Paar Fragen Zum Multithreading


#1 Mitglied ist offline   LaberLu 

  • Gruppe: aktive Mitglieder
  • Beiträge: 244
  • Beigetreten: 15. November 04
  • Reputation: 0

geschrieben 28. März 2008 - 17:52

Hallo,

ich habe mir jetzt http://www.galileocomputing.de/openbook/vi...harp_11_002.htm durchgelesen.
Dort wird im ersten Beispielcode mit zwei Threads an einer Methode gearbeitet. Wenn ich aber mit mehreren Thread zwar dieselbe Methode benutzen will, jedoch mit verschiedenen Parametern, müsste ich ja mehrere Klassen haben. Wenn ich diese als Array mache, gibt es eine Möglichkeit später weitere hinzuzufügen?

Wenn ich in dieser Methode einen Timer mache, sowie das Tick Event, gehört dann der Timer mit zum Thread und das Tick Event wird unter dem Thread ausgeführt?
Und zählt der immer? Auch wenn ein anderer Thread mit höherer Priorität arbeitet und der Thread eigentlich gar nicht arbeiten dürfte?


Ich glaube das wars erstmal, wenn ich mir noch mehr Fragen einfallen melde ich mich nocheinmal :ph34r:

Dieser Beitrag wurde von LaberLu bearbeitet: 28. März 2008 - 17:53

Eingefügtes Bild
0

Anzeige



#2 Mitglied ist offline   LaberLu 

  • Gruppe: aktive Mitglieder
  • Beiträge: 244
  • Beigetreten: 15. November 04
  • Reputation: 0

geschrieben 28. März 2008 - 22:19

ok, später hinzufügen sollte gehen. Ich habe gerade herrausgefunden, dass man Arraygrößen nachträglich verändern kann. Es geht zwar der Inhalt verloren, aber das ist in diesem Fall ja egal.
Eingefügtes Bild
0

#3 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.947
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 28. März 2008 - 22:24

Hmm...ich habe zwar nach mehrmaligem Lesen nicht genau verstanden, was du eigentlich vorhast (liegt vielleicht auch an mir, ist ja schon spät ;D), aber Arraygrößen kannst du nicht verändern. Das was du machst, ist sicherlich ein neues Array erzeugen.
0

#4 Mitglied ist offline   LaberLu 

  • Gruppe: aktive Mitglieder
  • Beiträge: 244
  • Beigetreten: 15. November 04
  • Reputation: 0

geschrieben 28. März 2008 - 22:31

Ich meine das hier:
test[] testklasse = new test[5];
for (int a = 0; a < 5; a++)
{
    testklasse[a] = new test();
}
//Andere Arraygröße wird benötigt
testklasse = new test[6];
for (int a = 0; a < 6; a++)
{
    testklasse[a] = new test();
}

(test ist meine Klasse)

Kann auch sein, das das Array neu erzeugt wird, aber der Name ist noch gleich.

Dieser Beitrag wurde von LaberLu bearbeitet: 28. März 2008 - 22:32

Eingefügtes Bild
0

#5 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.947
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 28. März 2008 - 22:34

Du überschreibst einfach die Variable. Das alte Array ist zwar noch da, man kann auf es aber nicht mehr zugreifen, weil die Referenz fehlt bzw. überschrieben wurde. Dafür gibt es dann den schönen Garbage Collector der diesen Müll aufsammelt und beseitigt.
0

#6 Mitglied ist offline   LaberLu 

  • Gruppe: aktive Mitglieder
  • Beiträge: 244
  • Beigetreten: 15. November 04
  • Reputation: 0

geschrieben 28. März 2008 - 22:55

Kann man den auch irgendwie manuell laufen lassen?


Um mit dem zweiten meine ich z.B. so ein Beispiel:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

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

        private void Form1_Load(object sender, EventArgs e)
        {
            test klasse = new test();
            Thread thread = new Thread(new ThreadStart(klasse.testmethode));
            thread.Priority = ThreadPriority.Lowest;
            thread.Start();
        }
    }

    public class test
    {
        public void testmethode()
        {
            System.Windows.Forms.Timer timer2;
            timer2 = new System.Windows.Forms.Timer();
            timer2.Interval = 10000;
            timer2.Tick +=new EventHandler(timer2_Tick);
            timer2.Enabled = true;
        }

        private void timer2_Tick(object sender, EventArgs e)
        {

        }
    }
}



wird timer2_Tick auch unter dem Thread ausgeführt?

Dieser Beitrag wurde von LaberLu bearbeitet: 28. März 2008 - 22:56

Eingefügtes Bild
0

#7 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.947
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 28. März 2008 - 23:19

Zitat

Kann man den auch irgendwie manuell laufen lassen?

Ja, aber nicht empfehlenswert, weil du damit sowieso nicht das erreicht was du eigentlich machen willst. Zudem ist der GC idR schlauer, als du es jemals sein wirst.

Gewöhne dir mal an Klassennamen groß zu schreiben, kann ja kein Schwein entziffern. ;D

Zitat

wird timer2_Tick auch unter dem Thread ausgeführt?

Ja, er wird im zweiten Thread ausgeführt.

Vielleicht interessiert dich das ja:

Zitat

The Windows Forms Timer component is single-threaded, and is limited to an accuracy of 55 milliseconds. If you require a multithreaded timer with greater accuracy, use the Timer class in the System.Timers namespace.

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0