Dies ist etwas verwandt mit einem former question von mir darüber, wie SleepEx
tatsächlich funktioniert. The docs sagen, dass der Thread ausgeführt wird SleepEx
wird fortgesetzt, wenn APC in die Warteschlange gestellt und APC möglicherweise in der Warteschlange, während der Thread APC bereits ausgeführt wird.Wie viele APCs werden während SleepEx verarbeitet?
Also, wie lange dauert der Thread weiterhin APCs? Ist es, bis die Warteschlange leer ist, wenn überprüft und in diesem Moment SleepEx
die Kontrolle an den Anrufer zurückgibt? Oder wird nur genau ein APC von diesem Thread ausgeführt, dann kehrt SleepEx
zurück und eine andere Ausführung von APC würde SleepEx
benötigen, um noch einmal aufgerufen zu werden?
Ich habe das Gefühl, dass APCs ausgeführt werden, bis die Warteschlange zum ersten Mal leer ist. Vielen Dank!
Es ist unerkennbar. Der Thread, der QueueUserApc() aufruft, hat keine Ahnung, ob der alertable Thread wieder aufgenommen wurde. Ob der alarmierbare Thread die Warteschlange vor der Wiederaufnahme abarbeitet oder nicht, spielt keine Rolle mehr. –
@HansPassant Meine Frage ist nicht aus der Perspektive von QueueUserApc, aber wie SleepEx funktioniert. –
@HansPassant - du irrst dich. Dies ist wahrscheinlich undokumentiert, aber genau bekannt - wenn die Thread-Rückkehr von der * APC * - Systemprüfung erfolgt, werden zusätzliche APC in den Thread eingefügt. und wenn ja - führe es aus. also wird das in loop sein, bis kein APC mehr in Thread – RbMm