Posted on 2009-04-19 21:53
S.l.e!ep.¢% 閱讀(815)
評論(0) 編輯 收藏 引用 所屬分類:
MulThreads
CAll QueueUserWorkItem Function
當第一次調用 QueueUserWorkItem 時, Windows將創建一個線程池,其中的一個線程將執行 Function 函數,函數執行完成后,該線程返回線程池,等待新的任務。由于 Windows 依賴于該過程來完成線程池的功能,因此 Function 中不能有任何中止該線程的調用,如 ExitThread。 假如當調用 QueueUserWorkItem 時,沒有可用的線程,Windows 就可以通過創建額外的線程增加線程池中線程的數量。線程池中的線程的數量是動態的,并且受 Windows 的控制,Windows 內部的調度算法決定處理當前線程工作負載的最佳方式。
如果知道所要處理的工作需要很長時間才能完成,可以在調用 QueueUserWorkItem 時,將參數的 Flags 設置為 WT_EXECUTELONGFUNCTION ,這時如果線程池中的所有的線程都處于忙狀態, 那么 Windows 將自動創建新的線程。
Windows 線程池中的線程有兩種類型,一種可以用來處理異步I/O, 另一種則不能。前者依賴于IO完成端口,IOCP是一種Windows內核對象,它可以將線程和I/O端口綁定在特定的系統資源上,對帶有完成端口的I/O進行處理是一個復雜的過程。
調用 QueueUserWorkItem 時,需要標識哪些線程執行I/O,哪些線程不執行I/O, 將 QueueUserWorkItem 中的 Flags 設置成 WT_EXECUTIONDEFAULT, 就可以告訴線程池該線程不執行異步I/O,從而可以對其進行相應的管理;對于執行異步I/O的線程,則應該將其 Flags 設置為 WT_EXECUTEIONIOTHREAD.