首先看code(vs 2008下編譯通過):
運行結果:
疑惑以及解釋:(有什麼不妥的地方,還請大家多多指教)
由於我這裏設置等待的時間是0,所以在新建立的兩個線程還未執行前,主線程已經執行到了getchar();
也就是說已經執行了closehandle(),那後面的兩個線程怎麼又能執行並打印結果呢?開始一直對這個問題
不解,通過翻閱了王豔平的《Windows程序設計》,才明白原來closehandle()並沒有真正的銷燬句柄
具體解釋:
每次createthread()創建線程對象的時候,線程對象中Usage count的初始化值爲2(注意不是1)
closehandle()能是Usage count的值減少1,這個時候Usage count的值爲1,所以並沒有銷燬,只有
當線程執行的函數通過return結束的時候,Usage count繼續減少1變爲0,這個時候才真正的銷燬對象