Thread-Zeitüberschreitung in c #

8

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%     
DeveloperInToronto 07.07.2010, 13:20
quelle

7 Antworten

4

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.

    
DeveloperInToronto 15.03.2011, 16:00
quelle
2

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%     
Ed Power 10.07.2010 01:09
quelle
1

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.

    
C.Evenhuis 07.07.2010 13:49
quelle
0

Siehe: Ссылка

Sehen Sie sich die TimeSpan-Methode Ссылка

an     
sbenderli 07.07.2010 13:25
quelle
0

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.

%Vor%     
Brian Gideon 07.07.2010 13:35
quelle
0

"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%     
Jean-Christophe Fortin 07.07.2010 14:28
quelle
0

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.

    
apoorv020 07.07.2010 16:21
quelle

Tags und Links