Autor Beitrag
CodeExce
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Mi 25.03.15 08:51 
Hallo,
ich möchte den Worker mehrmals in unterschiedlichen Threads ausführen, die dann auf mehreren Kernen laufen sollen.
Dieser Worker soll mehrere Klassen (Objekte) haben, die er dann aufrufen.
zB. der Manager soll 2 Sekunden warten und dann ein Callback an den Worker Thread geben

Nun ist mein Problem das der Manager in kein Thread mehr läuft, bzw. der Worker Thread beendet wird.
Wie könnte ich das lösen, dass der Worker mit allen Objekten in einen Thread läuft bzw. das auf einer anderen Weise immer noch alles in seperaten Threads läuft?
An welcher Stelle wird überhaupt der Worker Thread beendet?

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
namespace TestFrom
{

    public class WorkerThreadExample
    {
        static void Main()
        {
            for (int i = 0; i < 10; i++)
            {
                Worker workerObject = new Worker();
                Thread workerThread = new Thread(workerObject.start);
                workerThread.Start();
            }
        }
    }

    public class Worker
    {
        Manager manager = null;
        public void start()
        {
            Console.WriteLine("Thread gestartet....");
            manager = new Manager(this);
            run();
        }

        public void run()
        {
            Console.WriteLine("Thread läuft weiter....");
            manager.startCallback();
        }

        public void callback()
        {
            Console.WriteLine("Callback von Manager gestartet....");
        }
    }

    public class Manager
    {
        Worker worker = null;
        public Manager(Worker _worker)
        {
            Console.WriteLine("Manager wird erstellt....");
            worker = _worker;
        }

        public void startCallback()
        {
            Console.WriteLine("Manager soll Worker Callback weiterführen...");
            Thread.Sleep(2000);
            worker.callback();
        }
    }
}


Vielen Dank,
CodeExce

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 25.03.15 10:41 
Hallo und :welcome:

leider ist dein Code für Multithreadprogrammierung so nicht zu gebrauchen - ich denke dir fehlen noch die Grundlagen dazu. Auf die Schnelle kann ich dir nur z.B. den Artikel Multi-Threaded Programmierung empfehlen.

Ein Thread ist dann beendet, wenn dessen Start-Methode beendet wird. Solange du dort keine Schleife (o.ä.) oder Wartemethode benutzt, also nach einem einmaligen Durchlauf.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 25.03.15 12:12 
Zitat:
Wie könnte ich das lösen, dass der Worker mit allen Objekten in einen Thread läuft bzw. das auf einer anderen Weise immer noch alles in seperaten Threads läuft?


Es läuft alles in 10 separaten Threads. Und sobald die alle das gemacht haben was du denen aufgetragen hast (2 Sekunden warten) beenden die sich und sobald alle Threads beendet sind endet halt auch der Prozess. Läuft bei dir doch irgendwie alles erwartungskonform? Oder was hast du erwartet?