Von the documentation of the ThreadPool.RegisterWaitForSingleObject
Methode liest, ist es nicht klar, ob:Blockiert ThreadPool.RegisterWaitForSingleObject den aktuellen Thread oder einen Threadpool-Thread?
Es blockiert den aktuellen Thread, während auf dem
EventWaitHandle
warten und dann dieWaitOrTimerCallback
auf einem Gewinde Thread-Pool in Auftrag gibt, oderEs beauftragt ein Thread-Pool-Thread, um auf den Wait-Handle zu warten und dann auf demselben Thread die
WaitOrTimerCallback
auszuführen, sobald der Wait-Handle signalisiert wurde.Es blockiert den aktuellen Thread und wenn das Wait-Handle signalisiert wird, ruft es den
WaitOrTimerCallback
auf dem aktuellen Thread. Aber das wäre die äquivalente Funktionalität vonWaitHandle.WaitOne()
. Außerdem würde es den Thread-Pool überhaupt nicht einbeziehen.
Welcher der drei ist das?
Vielen Dank. Es ist schon eine Weile her, seit ich C++ berührte und so ist mein Verständnis davon, was ich von der CLR-Quelle gelesen habe, begrenzt, aber ich versuche es. Wo finde ich die Definition/den Körper von 'QueueUserAPC'? Wie suche ich nach dem Körper einer Funktion? Ich habe das ** Find ** -Fenster im Browser verwendet, weil der Aufruf von 'QueueUserAPC' von keinem Empfänger/Objekt qualifiziert wurde, also habe ich in derselben Datei gesucht, konnte sie aber nicht finden. Außerdem sehe ich keinen Aufruf von 'WaitForMultipleObjects/Ex' im Quellcode für die' RegisterWaitForSingleObject'-Methode in dieser Datei. Wohin schaust du? –
Schließlich, was ist APC? Ich schließe daraus, dass es eine Win32-Metapher für ein Workitem/eine Arbeit ist, die getan werden muss? –
Es ist eine Betriebssystemfunktion, so dass es WFMO. Der Quellcode ist nur für Microsoft-Mitarbeiter sichtbar. Schauen Sie in MSDN nach, um zu sehen, was sie tun. APC ist asynchroner Prozeduraufruf, .NETs BeginInvoke() ist ungefähr ähnlich. Sehr grob. Der Begriff der alertfähigen Threads, die APCs ausführen können, ist in .NET nicht verfügbar, zu schwierig, um es richtig zu machen. –