比較不錯(cuò)的方法是:
1、在主線程(運(yùn)行main函數(shù)的線程)中利用SetConsoleCtrlHandler注冊(cè)的控制事件處理函數(shù)(注意:這個(gè)函數(shù)將運(yùn)行在另外的線程, 這點(diǎn)可用GetCurrentThreadId驗(yàn)證之)7 ^& t" R+ _, D3 [. o
2、控制事件產(chǎn)生后, 在控制線程(運(yùn)行控制事件處理函數(shù)的線程)中設(shè)置標(biāo)志量表明程序開始退出( 主線程檢測(cè)到標(biāo)志量變化后將開始等待其余線程退出).控制線程開始等待工作者線程退出完成.
3、各工作者線程檢測(cè)到標(biāo)志量的變化, 退出. V& E; R' u) M% J s
4、控制線程退出
主線程等待其余線程退出完成,退出3 f; C!