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 只將鍵盤有訊息傳送給具有輸入極點的視窗,但滑鼠...