Wenn ein ThreadA schläft, wie wird ein anderer Thread threadB ThreadA starten? Bitte geben Sie ein Beispiel an, wenn möglich.Starten eines schlafenden Threads in .NET
Antwort
Anstatt schlafen zu müssen, müssen Sie eine EventWaitHandle erstellen und WaitOne mit einem Timeout verwenden.
Wenn Sie möchten, dass der Thread früher aufwacht, legen Sie das Ereignis einfach auf Signalisierung fest.
Erstellen Sie zunächst die EventWaitHandle
:
wakeUpEvent = new EventWaitHandle(false, EventResetMode.ManualReset);
Dann in Ihrem Thread:
wakeUpEvent.WaitOne(new TimeSpan(1, 0, 0));
Wenn das Hauptprogramm will den Thread zu früh aufwachen:
wakeUpEvent.Set();
Hinweis: Sie können das Ereignis entweder auf automatisches Zurücksetzen oder manuelles Zurücksetzen setzen. Automatisches Zurücksetzen bedeutet, dass WaitOne, sobald es vom Ereignis zurückkehrt, es auf nicht signalisiert zurücksetzt. Dies ist nützlich, wenn Sie sich in einer Schleife befinden und mehrmals signalisieren.
Ein Thread kann gestartet werden, indem auf ein WaitObject gewartet wird und der andere Thread die Set-Methode darauf aufruft. Schau dir die WaitHandle.WaitOne method an.
Here's Artikel, der ebenfalls hilfreich sein kann.
- 1. Starten eines Threads mit einem Parameter
- 2. Starten eines Threads in einem Windows CE 6.0-Dienst
- 3. Starten eines Threads nach dem aktuellen Thread beendet
- 4. Starten mehrerer Dienste auf Threads
- 5. Vorteile von Azure WorkerRole vs. Starten eines neuen Threads
- 6. Überwachen Sie .NET-Threads
- 7. Starten einer Java-Klasse in verschiedenen Threads
- 8. Hibernate/Neustart eines Threads
- 9. Threads, die Daten in .NET zurückgeben
- 10. Starten und Stoppen von Ruby-Threads
- 11. Verzögerter Start eines Threads in C++ 11
- 12. So erhalten Sie die Stapelgröße eines vorhandenen .NET-Threads
- 13. Wie kann ich einen schlafenden Thread in C# aufwecken?
- 14. Ruby Net :: FTP-Timeout-Threads
- 15. Ermitteln der Quelle eines Threads
- 16. Tasks vs Threads in .NET 4.5
- 17. Problem mit Random und Threads in .NET
- 18. asyncore Callbacks starten Threads ... ok zu tun?
- 19. Mehrere Host-Threads starten einzelne CUDA-Kernel
- 20. POSIX-Threads und Beenden eines Threads
- 21. Entwicklerausnahme beim Starten eines Client-Server-Modells auf Eiffel net
- 22. Auswirkung von IsBackground auf .Net-Threads?
- 23. Schwerwiegender Fehler beim Starten von Threads in Symfony-Befehl
- 24. AVAudioPlayer von einem schlafenden iPhone abspielen
- 25. Wie tcplistener eingehende Verbindungen über Threads in .NET verteilt werden?
- 26. .NET WPF MissingMethodException beim Starten neuer Thread
- 27. .NET GC-Spezifikation und mehrere Threads
- 28. Starten eines modalen UINavigationControllers
- 29. Catching unbehandelt Ausnahme eines Threads
- 30. mithilfe eines Httpcontext über Threads
Wenn Sie möchten, dass der Thread automatisch aufhört und manuell schreibt: wakeUpEvent = new EventWaitHandle (false, EventResetMode.ManualReset | EventResetMode.AutoReset); Wenn der Timer beendet wird, wird der Thread wieder funktionieren und Sie können ihn auch manuell stoppen. – aharon