《Windows核心編程》第6章 筆記

來源:互聯網
上載者:User
1、線程和Object
一個線程擁有兩個使用者物件,即視窗和掛鈎。當線程終止運行時,系統會自動
撤消任何視窗,並且卸載線程建立的或安裝的任何掛鈎。其他對象只有在擁有
線程的進程終止運行時才被撤消。

2、建立
在C++中,若要建立一個新線程,絕對不要叫用作業系統的CreateThread函
數,必須調用C/C++運行期庫函數_beginthreadex。
注意,_beginthreadex函數只存在於C/C++運行期庫的多線程版本中。如果
連結到單線程運行期庫,就會得到一個連結程式報告的“未轉換的外部符號”
錯誤訊息。

3、關於“偽控制代碼”
GetCurrentProcess(),GetCurrentThread()函數返回的是“偽控制代碼”(當前
作業系統下為常量值-1),僅僅用來標識調用線程/進程自身,不可以傳遞
給其他進程/線程。如果需要傳遞,必須使用DuplicateHandle()函數複製
出“真實控制代碼“用來傳遞。
比如下面的調用把
DuplicateHandle(
GetCurrentProcess(),    /*hSourceProcessHandle*/
GetCurrentThread(),    /*hSourceHandle*/
GetCurrentProcess(),    /*hTargetProcessHandle*/
&hRealHandle,        /*lpTargetHandle*/
0,            /*dwDesiredAccess*/
FALSE,        /*bInheritHandle*/
DUPLICATE_SAME_ACCESS,/*dwOptions*/
);
由於DuplicateHandle會遞增特定對象的使用計數,因此當完成對複製物件控點的使用時,
應該將目標控制代碼傳遞給CloseHandle,從而遞減對象的使用計數,這一點很重要。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.