Ich bin neu in C # einzufädeln. Gibt es überhaupt eine Zeitüberschreitung für einen Thread, ohne den aufrufenden Thread zu blockieren (in C # 3.5)?
Wenn nicht, ist es logisch, eine Funktion unter Verwendung eines Threads auszuführen und innerhalb dieser Funktion einen Thread zu erstellen und ihn zu verbinden, um dieses Hauptproblem der Thread-Blockierung zu überwinden? Zur Veranschaulichung:
Anstelle von:
%Vor%Verwenden Sie etwas wie:
%Vor%Ich überprüfte und der einfachste und umfassendste Weg, dies zu tun, war die Lösung, die ich in der Beschreibung der Frage erwähnt habe. Ein Thread mittlerer Ebene kann leicht auf den zweiten Thread ohne Unterbrechung über den Haupt-Thread warten; und es kann den zweiten Thread töten, wenn es nicht innerhalb der erforderlichen Zeit antwortet. Genau das habe ich gebraucht. Ich habe es benutzt und es hat ohne Probleme funktioniert.
Sie können einen System.Threading.Timer für jeden Thread starten und ihn an die ManagedThreadId des Threads übergeben. Behalten Sie Wörterbücher für die aktiven Threads und deren Timer bei, die von ManagedThreadId angegeben werden. Wenn ein Timer abläuft, verwenden Sie die übergebene Thread-ID, um den Thread abzubrechen und seinen Timer zu beenden. Wenn der Thread normal beendet wird, rufen Sie einen Rückruf auf, der den Timer beendet. Hier ist ein einfaches Konsolenbeispiel:
%Vor% Sie können auch einen Blick auf ThreadPool.QueueUserWorkItem()
( Ссылка ) werfen eine Menge Zeug für dich.
Wie Brian bemerkte, ist das Abbrechen eines Threads normalerweise keine schlaue Sache, weil er gerade dabei sein könnte, wichtige Dinge zu tun.
Am einfachsten ist es, Thread.Join
an sicheren Punkten von Ihrem Hauptthread aufzurufen und die Zeit zu verstreichen, die Sie auf den Join warten möchten.
"Join member - & gt; Blockiert den aufrufenden Thread, bis ein Thread beendet wird, während das standardmäßige COM- und SendMessage-Pumpen fortgesetzt wird." MSDN-Website.
thrd1.Join () weist den aufrufenden Thread an, bis zum Abschluss von thrd1 zu warten.
Meine Lieblingslösung ist, eine kleine Klasse zu erstellen, mit der ich die Ausführung des Threads steuern kann.
%Vor%Sehen Sie sich die Methode WaitHandle.WaitOne () mit dem middleObject-Schema an.
%Vor%Ich bin mir nicht sicher, was mit dem nicht abgeschlossenen Thread passieren würde.
Tags und Links c# multithreading