導航:首頁 > 編程系統 > closehandlelinux線程

closehandlelinux線程

發布時間:2025-01-13 14:22:12

① 創建線程後馬上CloseHandle(threadhandle)起什麼作用

摘抄:我在看代碼時發現,如下一段代碼:
HANDLE threadhandle = CreateThread(NULL, 0, RecvThreadProc, NULL, NULL, NULL);
CloseHandle(threadhandle);
不明白為什麼創建線程後,要馬上把線程的句柄關閉,這樣做的目的是什麼? 這樣做會殺掉線程嗎? 1,線程和線程句柄(Handle)不是一個東西,線程是在cpu上運行的.....(說不清楚了),線程句柄是一個內核對象。我們可以通過句柄來操作線程,但是線程的生命周期和線程句柄的生命周期不一樣的。線程的生命周期就是線程函數從開始執行到return,線程句柄的生命周期是從CreateThread返回到你CloseHandle()。
2,所有的內核對象(包括線程Handle)都是系統資源,用了要還的,也就是說用完後一定要closehandle關閉之,如果不這么做,你系統的句柄資源很快就用光了。 計數減一而已,前提是你再不需要用這個線程句柄,這樣線程結束後,資源立刻被釋放。 內核對象由內核所擁有,而不是由進程所擁有。
在C l o s e H a n d l e 返回之前,它會清除進程的句柄表中的項目,該句柄現在對你的進程已經無效,不應該試圖使用它。無論內核對象是否已 經撤消,都會發生清除操作。當調用C l o s e H a n d l e 函數之後,將不再擁有對內核對象的訪問權,不過,如果該對象的使用計數沒有遞減為 0 ,那麼該對象尚未被撤消。這沒有問題,它只是意味著一個或多個其他進程正在使用該對象。當其他進程停止使用該對象時(通過調用C l o s e H a n d l e ),該對象將被撤消。

② 為什麼必須要使用CloseHandle關閉句柄

很多程序在創建線程都這樣寫的:
ThreadHandle = CreateThread(NULL,0,.....);
CloseHandel(ThreadHandle );
1,線程和線程句柄(Handle)不是一個東西,線程是在內cpu上運行的.....(說不清容楚了),線程句柄是一個內核對象。我們可以通過句柄來操作線程,但是線程的生命周期和線程句柄的生命周期不一樣的。線程的生命周期就是線程函數從開始執行到return,線程句柄的生命周期是從CreateThread返回到你CloseHandle()。
2,線程句柄是一種內核對象,系統維護著每一個內核對象,當每個內核對象引用記數為0時,系統就從內存中釋放該對象,CloseHandle就是將該線程對象的引用記數減1。所有的內核對象(包括線程Handle)都是系統資源,用了要還的,也就是說用完後一定要closehandle關閉之,如果不這么做,你系統的句柄資源很快就用光了。
只是關閉了一個線程句柄對象,表示我不再使用該句柄,即不對這個句柄對應的線程做任何干預了。並沒有結束線程。

閱讀全文

與closehandlelinux線程相關的資料

熱點內容
編程圖元屬性怎麼修改 瀏覽:828
word文檔的大括弧怎麼輸入 瀏覽:862
關於旅遊收入的數據從哪裡找 瀏覽:989
gson解析json集合問題 瀏覽:680
安卓ipsec標識符填什麼 瀏覽:215
在哪裡解壓文件第一分卷 瀏覽:63
奧維使用教程 瀏覽:324
編程程序怎麼轉到plc上 瀏覽:807
文件名沖突但是找不到 瀏覽:261
上海瑞金醫院app下載 瀏覽:998
qq群里的機器人買武器 瀏覽:428
捕魚達人歷史版本 瀏覽:73
mp4視頻文件解密軟體 瀏覽:62
多軸編程哪個軟體最方便 瀏覽:27
老平板哪個是顯示屏數據線插座 瀏覽:849
5sing上傳音頻文件格式 瀏覽:171
win10輸入文件滑鼠右鍵異常 瀏覽:634
聽幼兒故事用什麼app 瀏覽:514
iphone修改音頻文件名 瀏覽:53
國家氣象站點數據在哪裡下載 瀏覽:342

友情鏈接