日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CreateThread函数

發(fā)布時(shí)間:2023/12/19 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CreateThread函数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

創(chuàng)建一個(gè)在調(diào)用進(jìn)程的虛擬地址空間內(nèi)執(zhí)行的線程。

要?jiǎng)?chuàng)建在另一個(gè)進(jìn)程的虛擬地址空間中運(yùn)行的線程,請(qǐng)使用 CreateRemoteThread函數(shù)。

語法

HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,SIZE_T dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,__drv_aliasesMem LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadId );

參數(shù)

  • lpThreadAttributes

指向SECURITY_ATTRIBUTES 結(jié)構(gòu)的指針,該結(jié)構(gòu)確定子進(jìn)程是否可以繼承返回的句柄。如果 lpThreadAttributes為NULL,則無法繼承句柄。

結(jié)構(gòu)的lpSecurityDescriptor成員為新線程指定安全描述符。如果lpThreadAttributes為NULL,則線程獲取默認(rèn)安全描述符。線程的默認(rèn)安全描述符中的ACL來自創(chuàng)建者的主要標(biāo)志。

  • dwStackSize

堆棧的初始大小,以字節(jié)為單位。系統(tǒng)將此值四舍五入到最近的頁面。如果此參數(shù)為零,則新線程使用可執(zhí)行文件的默認(rèn)大小。有關(guān)更多信息,請(qǐng)參閱線程堆棧大小。

  • lpStartAddress

指向由線程執(zhí)行的應(yīng)用程序定義函數(shù)的指針。該指針表示線程的起始地址。有關(guān)線程函數(shù)的更多信息,請(qǐng)參見 ThreadProc

  • lpParameter

指向要傳遞給線程的變量的指針。

  • dwCreationFlags

控制線程創(chuàng)建的標(biāo)志。

值含義
0該線程在創(chuàng)建后立即運(yùn)行。
CREATE_SUSPENDEDs 0x00000004線程是在掛起狀態(tài)下創(chuàng)建的,并且在調(diào)用ResumeThread函數(shù)之前不會(huì)運(yùn)行 。
STACK_SIZE_PARAM_IS_A_RESERVATION 0x00010000在所述dwStackSize參數(shù)指定堆棧的初始保留大小。如果未指定此標(biāo)志,則dwStackSize指定提交大小。

  • lpThreadId

指向接收線程標(biāo)識(shí)符的變量的指針。如果此參數(shù)為 NULL,則不返回線程標(biāo)識(shí)符。

返回值

如果函數(shù)成功,則返回值是新線程的句柄。

如果函數(shù)失敗,則返回值為NULL。要獲取擴(kuò)展錯(cuò)誤信息,請(qǐng)調(diào)用 GetLastError。

請(qǐng)注意,即使lpStartAddress指向數(shù)據(jù),代碼或無法訪問,CreateThread也可能成功 。如果線程運(yùn)行時(shí)起始地址無效,則發(fā)生異常,并且線程終止。由于無效的起始地址導(dǎo)致的線程終止被視為線程進(jìn)程的錯(cuò)誤退出。此行為類似于CreateProcess的異步特性,即使它引用無效或缺少動(dòng)態(tài)鏈接庫(kù)(DLL),也會(huì)創(chuàng)建該進(jìn)程。

備注

進(jìn)程可以創(chuàng)建的線程數(shù)受可用虛擬內(nèi)存的限制。默認(rèn)情況下,每個(gè)線程都有一兆字節(jié)的堆棧空間。因此,您最多可以創(chuàng)建2,048個(gè)線程。如果減小默認(rèn)堆棧大小,則可以創(chuàng)建更多線程。但是,如果為每個(gè)處理器創(chuàng)建一個(gè)線程并構(gòu)建應(yīng)用程序隊(duì)列,應(yīng)用程序維護(hù)上下文信息,則應(yīng)用程序?qū)⒕哂懈玫男阅堋T谔幚硐乱粋€(gè)隊(duì)列中的請(qǐng)求之前,線程將處理隊(duì)列中的所有請(qǐng)求。

使用THREAD_ALL_ACCESS訪問權(quán)限創(chuàng)建新的線程句柄。如果在創(chuàng)建線程時(shí)未提供安全描述符,則使用創(chuàng)建線程的進(jìn)程的主令牌為新線程構(gòu)造默認(rèn)安全描述符。當(dāng)調(diào)用者嘗試使用OpenThread函數(shù)訪問該線程時(shí),將根據(jù)此安全描述符評(píng)估調(diào)用者的有效令牌以授予或拒絕訪問權(quán)限。

調(diào)用GetCurrentThread 函數(shù)時(shí),新創(chuàng)建的線程對(duì)自身具有完全訪問權(quán)限。

Windows Server 2003: 線程對(duì)自身的訪問權(quán)限是通過根據(jù)為線程構(gòu)造的默認(rèn)安全描述符評(píng)估創(chuàng)建線程的進(jìn)程的主令牌來計(jì)算的。如果在遠(yuǎn)程進(jìn)程中創(chuàng)建線程,則使用遠(yuǎn)程進(jìn)程的主令牌。因此,在調(diào)用GetCurrentThread時(shí),新創(chuàng)建的線程可能會(huì)減少對(duì)自身的訪問權(quán)限。某些訪問權(quán)限(包括THREAD_SET_THREAD_TOKEN和THREAD_GET_CONTEXT)可能不存在,從而導(dǎo)致意外故障。因此,建議不要在模仿其他用戶時(shí)創(chuàng)建線程。

如果線程是在可運(yùn)行狀態(tài)下創(chuàng)建的(即,如果未使用CREATE_SUSPENDED標(biāo)志),則線程可以在CreateThread返回之前開始運(yùn)行,特別是在調(diào)用者接收到創(chuàng)建的線程的句柄和標(biāo)識(shí)符之前。

線程執(zhí)行從lpStartAddress參數(shù)指定的函數(shù)開始。如果此函數(shù)返回,則DWORD返回值用于在對(duì)ExitThread函數(shù)的隱式調(diào)用中終止線程 。使用 GetExitCodeThread函數(shù)獲取線程的返回值。

創(chuàng)建的線程的線程優(yōu)先級(jí)為THREAD_PRIORITY_NORMAL。使用 GetThreadPriority和 SetThreadPriority函數(shù)來獲取和設(shè)置線程的優(yōu)先級(jí)值。

當(dāng)線程終止時(shí),線程對(duì)象獲得信號(hào)狀態(tài),滿足在對(duì)象上等待的任何線程。

線程對(duì)象保留在系統(tǒng)中,直到線程終止并且通過調(diào)用CloseHandle關(guān)閉了它的所有句柄。

ExitProcess, ExitThread, CreateThread, CreateRemoteThread的功能,以及正在啟動(dòng)的處理(如通過一個(gè)調(diào)用的結(jié)果 CreateProcess)的過程中是彼此之間串行化。這些事件中只有一個(gè)可以一次發(fā)生在地址空間中。這意味著以下限制包含:

在進(jìn)程啟動(dòng)和DLL初始化例程期間,可以創(chuàng)建新線程,但是在為進(jìn)程執(zhí)行DLL初始化之前它們不會(huì)開始執(zhí)行。
進(jìn)程中只有一個(gè)線程可以一次處于DLL初始化或分離例程中。
在DLL初始化或分離例程中沒有線程之前,ExitProcess不會(huì)完成。
調(diào)用C運(yùn)行時(shí)庫(kù)(CRT)的可執(zhí)行文件中的線程應(yīng)使用_beginthreadex和_endthreadex函數(shù)進(jìn)行線程管理,而不是 CreateThread和 ExitThread ; 這需要使用CRT的多線程版本。如果使用CreateThread創(chuàng)建的線程調(diào)用CRT,則CRT可以在低內(nèi)存條件下終止進(jìn)程。
Windows Phone 8.1: Windows Phone 8.1及更高版本上的Windows Phone應(yīng)用商店支持此功能。

Windows 8.1和Windows Server 2012 R2:Windows 8.1,Windows Server 2012 R2及更高版本上的Windows應(yīng)用商店應(yīng)用程序支持此功能。

例子
有關(guān)示例,請(qǐng)參閱 創(chuàng)建線程。

總結(jié)

以上是生活随笔為你收集整理的CreateThread函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。