首頁>Program>source

使用Visual Studio 2015,在一个新的空C ++專案中,為控製台應用程式構建以下內容:

int main() {
    return 0;
}

在返迴值上設置斷點,然後在除錯器中啟動程式.在windows 7上,从斷點開始,该程式只有一个執行緒.但是在windows 10上,它有五个(!)執行緒:主執行緒和四个等待同步物件的"工作執行緒"。

谁在啟動執行緒池(或如何查詢執行緒)?

最新回復
  • 5月前
    1 #

    水晶球說,"除錯>windows>執行緒"視窗在 ntdll.dll!TppWorkerThread上顯示了這些執行緒 .確保啟用Microsoft Symbol Server自己查看此資訊,請使用"工具">"選項">"除錯">" Symbols"。

    這在VS2013中也会發生,因此绝對不是由VS2015的新诊斷功能引起的,@ Adam的猜測不可能正確。

    TppworkerThread()是執行緒池執行緒的入口點.当我在此函式上使用Debug>New Breakpoint>Function Breakpoint設置斷點時.当第二个執行緒池執行緒開始執行時,我很幸運地捕获到了第一个執行緒池執行緒的堆棧跟蹤:

       [email protected]()  Unknown
        ntdll.dll!LdrpMapDllNtFileName()    Unknown
        ntdll.dll!LdrpMapDllSearchPath()    Unknown
        ntdll.dll!LdrpProcessWork() Unknown
        [email protected]()    Unknown
        ntdll.dll!TppWorkpExecuteCallback() Unknown
        ntdll.dll!TppWorkerThread() Unknown
        [email protected]@12()  Unknown
        ntdll.dll!__RtlUserThreadStart()    Unknown
    >   [email protected]()  Unknown
    

    顯然,載入程式正在windows 10上使用執行緒池載入DLL.那肯定是新的:)此時,主執行緒也在載入器中執行,並發工作。

    因此windows 10正在利用多个內核来更快地初始化程序.非常多的功能,不是錯誤:)

  • 5月前
    2 #

    這是預設的執行緒池。 https://docs.microsoft.com/zh-CN/windows/desktop/procthread/thread-pools

    每个程序都有一个預設的執行緒池。

  • 在C ++中將字元串轉換為日期
  • php:PDO連線測試