[C#] Threads

Seiten: 1
a-kuller
Verfasst am: 15.10.2014 um: 19:50 Uhr
 
Dr. CwCity.de
Community God
Beiträge: 4111
SPAM:
0% Spam
Hallo Leute,

ich bin eben dabei meine Hausaufgabe etwas zu verschönern, jedoch fällt mir dabei auf das mein Programm bei manchen stellen recht lange benötigt (wie z.B. dem Aufbau zu einer Datenbank, aber nur beim ersten mal). Daher habe ich mir gedacht, Hey schaust du dir mal Multithreading an, das wolltest du schon vor x Monaten machen .... Tja, jetzt sind es schon 2 Tage und ich habe immernoch keinen roten Faden gefunden.

Was möchte ich: erstellen eines neuen Threads, in diesem eine Aufgabe ausführen lassen, der Ursprungsthread soll so lange weiterarbeiten (also seine Aufgaben ausführen, in diesem Fall neue Frames erzeugen) bis der neu erstellte fertig ist und diese Daten verwenden.

So etwas wie:
> erstelle Frame
-> rufe Daten ab
--> neuer Thread
---> Datenbankverbindungsaufbau
> neuer Frame
-> Prüfe ob Verbindung hergestellt?
> neuer Frame
-> Prüfe ob Verbindung hergestellt?
--> Abrufen der Daten
> neuer Frame

Die Anwendung soll also nicht stehen bleiben (mit kommt es derzeit so vor als ob jemand Thread.Sleep(1000) ausführt).

Kennt jemand dazu leicht verständliche Tutorials auf Deutsch, neue Sachen in englisch sind mir doch etwas zu doof. Und was mir wichtig wäre: Ich möchte irgendwie die Datenbankverbindung aus diesem Thread haben ...

Hoffe Ihr könnt mir weiterhelfen.

Danke und have a nice evening


Mit freundlichen Grüßen

A. Kuller

bzw. UNO-Verbund

Keine Schuld ist dringender, als die, Dank zu sagen.
Cicero

 



markush
Verfasst am: 16.10.2014 um: 08:42 Uhr
 
Dr. CwCity.de
Community God
Beiträge: 3832
SPAM:
0% Spam
Den Verbindungsgeschichte in eine Klasse packen und als ein Thread starten, und wenn Daten empfangen wurden, diese über eine Funktion in das Hauptprogramm übergeben oder in eine Globale Variable schreiben, die dann zyklisch vom Hauptprogramm abgefragt wird.

Der Link zu meinem Github Profil

Weitere Links:
--> ratgeber---forum.de (Danke für die Unterstützung) <--
 

consider
Verfasst am: 16.10.2014 um: 17:14 Uhr
 
Dr. CwCity.de
Community God
Beiträge: 7217
SPAM:
0% Spam
Bei einer von zwei Threads benutzten Variable denke aber auch an Threadsicherheit.

C# habe ich vor einer Weile zu den Akten gelegt, dahe keine direkte Hilfe von mir.

Wenn du aber etwas Grundverständnis brauchst, könntest du ja auch etwas Java adaptieren, da die Sprachen sich ja recht ähnlich sind.

In der "Insel" steht einiges interessantes.

openbook.galileocomputing.de/javain...

Vielleicht kannst du ja die einzelnen Punkte auf C# umwandeln, indem du dir die konkreten Umsetzungen einzeln recherchierst. Wenn due das Kapitel durch hast, kannst du di deine Frage bestimmt selbst beantworten.

Edit: Mensch ich Trottel, es gibt ja auch ein ganz gutes C# Buch von Galileo-Press. Arbeite dir einfach mal die Kapitel über Threads durch, danach kannst du es sicher. Ist sicher besser, als unvollständige Tutorials.

openbook.galileo-press.de/visual_cs...



Letzte Änderung am: 16.10.2014 um: 21:43 Uhr durch: consider
 

a-kuller
Verfasst am: 17.10.2014 um: 17:14 Uhr
 
Dr. CwCity.de
Community God
Beiträge: 4111
SPAM:
0% Spam
Hi Ihr beiden,

ich habe gestern Abend nochmal ein wenig rumprobiert und es hinbekommen. Eine Klasse erstellt mit einer Methode und einer Variabel. Diese instanziiert und der dem Thread die Methode übergeben. Diese schreibt das Ergebnis in die Variabel, die ich wiederum abrufen kann.

Das Buch habe ich bei mir zu Hause auch als Hartes Stück rumliegen, nur habe ich es nicht begriffen wie ich Werte rausbekomme ... das wird leider auch gar nicht richtig erwähnt.

Mit freundlichen Grüßen

A. Kuller

bzw. UNO-Verbund

Keine Schuld ist dringender, als die, Dank zu sagen.
Cicero

 

consider
Verfasst am: 17.10.2014 um: 23:46 Uhr
 
Dr. CwCity.de
Community God
Beiträge: 7217
SPAM:
0% Spam
Hallo kuller,

ahte dabei aber auf die Synchronisation, bzw threadsicherheit der Variable. Wenn zwei Threads auf eine Variable zugreifen, musst du gewährleisten, dass sie das nicht gleichzeitig tun können, (bzw einer beim Zugriff unterbrochen wird und der andre weiter macht), da du ja sonst nie weist, ob die Reihenfolge stimmt und die Daten dann auch konsistent bleiben.

Wenn ein THread schreibt, unterbrochen wird,  und der andre gleichzeitig liest, ja was kommt denn dann am Ende raus? Der Inhalt vor dem Schreiben? Der danach? Was ganz andres? Daher ist es sinnvoll, das immer nur ein Thread gleichzeitig zugreifen kann und der andre so lange wartet. Oder der Zugriff auf die Datenstruktur nur lesend oder atomar ist.

Unter Java geht das mit dem Modifizierer "synchronized".

Unter C# gibt es da sicher was ähnliches. Ein prüfender Blick ist hier wichtig, denn solche Fehler können ganz schön eklig zu finden sein, wenn das Programm sich plötzlich und nur ab und an falsch verhält. Zumal hier das nutzen eines Debuggers den Fehler uU verschwinden lässt, da man Schrittweise durch geht...



Letzte Änderung am: 18.10.2014 um: 00:51 Uhr durch: consider
 

 
Seiten: 1

Folgende User sind hier gerade aktiv:
-

ANZEIGE