第六章(5)C C 執行期庫

2021-04-27 06:09:42 字數 2862 閱讀 3718

c/c++

執行期庫

若要使多執行緒c和

c + +

程式能夠正確地執行,必須建立乙個資料結構,並將它與使用

c/c++

執行期庫函式的每個執行緒關聯起來。 1

、_beginthreadex

_beginthreadex

函式的引數列表與

createthread

函式的引數列表是相同的,但是引數名和型別並不完全相同(

c / c + +

執行期函式不對

windows

資料型別有任何依賴)。

_beginthreadex

函式只存在於

c/c++

執行期庫的多執行緒版本中,多執行緒應用程式必須顯式轉換到多執行緒的

c/c++

執行期庫。 (

1)_beginthreadex

的一些要點: •

每個執行緒均獲得由

c/c++

執行期庫的堆疊分配的自己的

tiddata

記憶體結構。(

tiddata

結構位於

mtdll.h

檔案中的

visual c++

源**中)。 •

傳遞給_beginthreadex

的執行緒函式的位址儲存在

tiddata

記憶體塊中。傳遞給該函式的引數也儲存在該資料塊中。 •

_beginthreadex

從內部呼叫

createthread

,因為這是作業系統了解如何建立新執行緒的唯一方法。 •

當呼叫createthread

時,它被告知通過呼叫

_threadstartex

而不是pfnstartaddr

來啟動執行

新執行緒。還有,傳遞給執行緒函式的引數是

tiddata

結構而不是

pvparam

的位址。 •

如果一切順利,就會像

createthread

那樣返回執行緒控制代碼。如果任何操作失敗了,便返回

null。

(2)_threadstartex

的一些要點: •

新執行緒開始從

basethreadstart

函式(在

kernel32.dll

檔案中)執行,然後轉移到

_threadstartex。

•到達該新執行緒的

tiddata

塊的位址作為其唯一引數被傳遞給

_threadstartex。

•tlssetvalue

是個作業系統函式,負責將乙個值與呼叫執行緒聯絡起來。這稱為執行緒本地儲存器(

t l s),

_threadstartex

函式將tiddata

塊與執行緒聯絡起來。 •

乙個s e h

幀被放置在需要的執行緒函式周圍。這個幀負責處理與執行期庫相關的事情

.如執行期錯誤(和

c/c++

執行期庫的

signal

函式。(

用createthread

函式建立執行緒,然後呼叫

c/c++

執行期庫的

signal

函式,那麼該函式就不能正確地執行。 •

呼叫必要的執行緒函式,傳遞必要的引數。

(函式和引數的位址由

_ beginthreadex

儲存在tiddata

塊中。

•必要的執行緒函式返回值被認為是執行緒的退出**。

_threadstartex

並不只是返回到

basethreadstart

。如果它準備這樣做,那麼執行緒就終止執行,它的退出**將被正確地設定,但是執行緒的

tiddata

記憶體塊不會被撤消。這將導致應用程式中出現乙個漏洞。要防止這個漏洞,可以呼叫另乙個

c/c++

執行期庫函式

_endthreadex ,

並傳遞退出**。 2

、_endthreadex c

執行期庫的

_getptd

函式內部呼叫作業系統的

tlsgetvalue

函式,該函式負責檢索呼叫執行緒的

tiddata

記憶體塊的位址。然後該資料塊被釋放,而作業系統的

exitthread

函式被呼叫,以便真正撤消該執行緒。當然,退出**要正確地設定和傳遞。

exitthread

函式將撤消呼叫函式,並且不允許它從當前執行的函式返回。由於該函式不能返回,所以建立的任何

c + +

物件都不會被撤消。它會使得執行緒的

t i d d a t a

記憶體塊無法釋放,這樣,應用程式將會始終占用記憶體(直到整個程序終止執行為止)

c / c + +

執行期庫的啟動**為應用程式的主線程分配了資料塊,並且對資料塊進行了初始化,這樣,主線程就能安全地呼叫

c / c + +

執行期函式中的任何函式。當主線程從它的進入點函式返回時,

c / c + +

執行期庫就會釋放相關的資料塊。此外,啟動**設定了相應的結構化異常處理**,以便主線程能夠成功地呼叫

c / c + +

執行期庫的

s i g n a l

函式。 3、

_beginthread

與_endthread

_beginthread

無法建立帶有安全屬性的新執行緒,無法建立暫停的執行緒,也無法獲得執行緒的

i d值。

_endthread

函式不帶引數,執行緒的退出**必須硬編碼為0。

mysql第六章 第六章 mysql日誌

第六章 mysql日誌 一 錯誤日誌 錯誤日誌的預設存放路徑是 mysql 存放資料的地方 hostname.err 1.修改錯誤日誌存放路徑 mysqld log error data mysql mysql.log 2.檢視配置命令 show variables like log error 3...

第六章 指標

1.多位元組資料的位址是在最左邊還是最右邊的位置,不同的機器有不同的規定,這也正是大端和小端的區別,位址也要遵從邊界對齊 2.高階語言的乙個特性就是通過名字而不是位址來訪問記憶體的位置,但是硬體仍然通過位址訪問記憶體位置 3.記憶體中的變數都是義序列的0或1的位,他們可以被解釋為整數或者其他,這取決...

第六章總結

6.1 使用滑鼠 6.1.1 滑鼠時間和滑鼠訊息 根據使用者操作滑鼠時滑鼠的位置,滑鼠訊息分為兩類 客戶區滑鼠訊息和非客戶區滑鼠訊息。1.客戶去滑鼠訊息 2.當滑鼠游標位於視窗的使用者區時,將生成客戶滑鼠訊息。滑鼠訊息和鍵盤訊息有所不同,windows 只將鍵盤有訊息傳送給具有輸入極點的視窗,但滑鼠...