簡體   English   中英

WaitForSingleObject在等待超時時間為零時會導致上下文切換嗎?

[英]Will WaitForSingleObject cause a context switch when waiting with a timeout time of zero?

WaitForSingleObject (或WaitForMultipleObjects )在等待超時時間為零的事件時會導致上下文切換嗎? (就我所知, Sleep(0)會立即產生一個線程時間片。)

現在,關於WaitForSingle|MultipleObject和Event句柄。 如果WaitFor * Object實際上需要等待,它顯然會產生剩余的時間片。 然而,有兩種情況API 並不需要等待:

  • 發出事件信號,在這種情況下,它可以返回WAIT_OBJECT_0
  • 或者事件的狀態無關緊要,因為我指定等待時間為零,在這種情況下它可以立即返回,使用WAIT_OBJECT_0WAIT_TIMEOUT

現在,鑒於此,如果提供超時時間為零, WaitForSingleObject會導致線程上下文切換?

基於Windows Research Kernel和KeWaitForSingleObject一些簡單的逆向工程,答案是否定的 查看WRK,在調用KiSwapThread之前檢查內部計時器的到期時間,確保在沒有信號通知對象時立即返回該函數。

現在看來我在寫這個問題時找到了答案 - 這是我從可用文檔中假設的:

MSDN聲明如下:

dwMilliseconds [in]

超時間隔,以毫秒為單位。 如果指定了非零值,則該函數將等待,直到指示的對象發出信號或經過了間隔。 如果dwMilliseconds為零,則如果未指示指定的對象,則該函數不會進入等待狀態 ; 它總是立即返回。 如果dwMilliseconds為INFINITE,則僅在發出指定對象信號時才返回該函數。

我會認為這意味着如果對象發出信號 ,它不會進入等待狀態,我會解釋“ 沒有進入等待狀態 ”,因為“沒有發生上下文切換”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM