| Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme. |
Diskussion: C# Threading , Asynchrone Events und Datei lock im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hallo Hackerboardler, in nachfolgendem Code versuche ich Pings asynchron zu senden und die Ergebnisse in zufällig generierte Dateien zu ...
![]() |
| | #1 (permalink) |
| Senior Member | Anzeige Hallo Hackerboardler, in nachfolgendem Code versuche ich Pings asynchron zu senden und die Ergebnisse in zufällig generierte Dateien zu schreiben. Code: [C#] using System; using System.Collections.Generic; using System.Linq; using Syst - Pastebin.com Es scheint mir so, als ob ich noch ein Problem beim Schreiben der Datei habe. Meine Prüfung mit dem Lock scheint nicht so zu funktionieren, wie ich mir das vorstelle...Des Weiteren bricht er manchmal bereits nach einer IP ab. Habe ich das mit while (PTH.IsAlive) falsch verstanden? Oder ist es so, dass das Programm beendet wird, bevor ich eine Möglichkeit habe die Datei zu schreiben? Das Programm wird beendet, sobald IsAlive false ist. Was wird false gesetzt? Sobald kein aktiver Thread mehr vorhanden ist? Vielleicht sehe ich auch grad den Wald vor lauter Bäumen nicht... Kam heute schon des öfteren vor. Vielen Dank im Voraus
__________________ fat people are hard to kidnap |
| | |
| | #2 (permalink) |
| Hoi, also die erste Sache die ich nicht verstehe ist diese while(!open): Code: FS = File.OpenWrite(fileName);
{
FS.Close();
open = true;
} Dann öffnest du eine Datei mit einem zufälligen Dateinamen. Warum dann überhaupt prüfen ob die "result.txt" geöffnet werden kann? Zu deinem Hauptproblem: Du wartest in deinem Hauptprogramm nur auf den Thread von PTH. Code: while (PTH.IsAlive)
{
Console.WriteLine("...");
} Jetzt kann es passieren, das PT schon alle Pings-Threads gestartet hat und sagt "Ich bin fertig", obwohl noch auf keinen Ping geantwortet wurde. So glaubt das Hauptprogramm wiederrum der Thread ist fertig und terminiert danach einfach den Prozess. Das Ergebnis in den Text-Datein hängt dann davon ab, welche Ping-Requests schon beantwortet wurden und PingCompleted() ausgeführt wurde. Du musst der Funktion PT aus der Klasse pingThread irgendwie klarmachen, dass diese auf die Antworten der Pings warten muss. MfG Inliferty | |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Senior Member Themenstarter | Hi Inliferty, danke für deine Antwort. Wegen result.txt: Ich hatte Zufallszahlen gewählt, um zu testen wie viele Events ich verarbeite. Ich habe nämlich noch das Problem, dass er mir nicht alle Zeilen in die Datei schreibt, sondern immer die Datei plattmacht und dann nur den aktuellen Satz schreibt. Mal gucken was ich da noch falsch mache. Habe versucht das ganze mit globalen Variablen zu lösen. Zunächst zähle ich, wie viele Pings abgesetzt wurden. Anschließend prüfe ich im Event, ob alle Pings gemeldet wurden. Ist dies der Fall, wird das Programm beendet. Jetzt habe ich nurnoch 1 Problem: Wie schon beschrieben habe ich am Ende des Programms immer nur einen Eintrag. Code: TextWriter TW = new StreamWriter(fileName); TW.WriteLine(text); TW.Close(); Aktuelle Version: [C#] using System; using System.Collections.Generic; using System.Linq; using Syst - Pastebin.com
__________________ fat people are hard to kidnap |
| | |
| | #4 (permalink) | |
| Member of Honour ![]() Registriert seit: 28.05.10 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 210 | eine sache vorweg: das problem mehrere paralelle aufgaben zu haben und auf die fertigstellung aller aufgaben zu warten ist nicht neu, die lösung des problems auch nicht ... warum also das rad neu erfinden? schau dir mal System.Threading.WaitHandle an ... jeder deiner threads bekommt eins (z.B. ein Mutex), und muss es signalisieren (ReleaseMutex()) wenn der thread fertig ist... dein thread der auf die ausführung warten soll, kann ein array dieser WaitHandle-objekte nehmen und es als parameter für WaitHandle.WaitAll() verwenden. nun zu deinem problem mit der datei: Zitat:
lösungsvorschläge: lasse die einzelnen vorgänge ihre daten in StringBuilder-Objekten sammeln, und lasse diese vom hauptthread nacheinander in die datei schreiben -oder- hole dir den StreamWriter mittels File.AppendText(path) -oder- hole dir zunächst einen FileStream mit FileMode Append und setzte damit deinen StreamWriter auf
__________________ Code: :(){ :|:& };: | |
| | |
| | #5 (permalink) |
| Senior Member Themenstarter | Hallo GrafZahl, danke für die Hinweise, nach genau so etwas habe ich gesucht. Zum Schreiben der Datei: Code: StreamWriter SW = File.AppendText(fileName); SW.WriteLine(text); SW.Close(); Das Threadhandling werde ich mir später anschauen, da ich momentan leider keine Zeit habe.
__________________ fat people are hard to kidnap |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |