APC異步過程調用

轉自http://blog.csdn.net/hurtmanzc/article/details/1687000

這是MSDN官網詳細的介紹:http://msdn.microsoft.com/en-us/library/windows/desktop/ms681951(v=vs.85).aspx

   APC : asynchronous procdure call 異步過程調用
    Alertable IO(告警IO)提供了更有效的異步通知形式。ReadFileEx / WriteFileEx在發出IO請求的同時,
    提供一個回調函數(APC過程),當IO請求完成後,
一旦線程進入可告警狀態,回調函數將會執行。
    以下五個函數能夠使線程進入告警狀態:
    SleepEx
    WaitForSingleObjectEx
    WaitForMultipleObjectsEx
    SignalObjectAndWait
    MsgWaitForMultipleObjectsEx
    線程進入告警狀態時,內核將會檢查線程的APC隊列,如果隊列中有APC,將會按FIFO方式依次執行。
    如果隊列爲空,線程將會掛起等待事件對象。以後的某個時刻,一旦APC進入隊列,線程將會被喚醒
    執行APC,同時等待函數返回WAIT_IO_COMPLETION。
    QueueUserAPC可以用來人爲投遞APC,只要目標線程處於告警狀態時,APC就能夠得到執行。
    使用告警IO的主要缺點是發出IO請求的線程也必須是處理結果的線程,如果一個線程退出時還有
    未完成的IO請求,那麼應用程序將永遠丟失IO完成通知。

    PS:Each thread has its own APC queue. The queuing of an APC is a request for the thread to call the APC function. The operating system issues a software interrupt to direct the thread to call the APC function.



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章