亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

(C++多線程問題)CreateThread()函數問題?

(C++多線程問題)CreateThread()函數問題?

Helenr 2019-02-24 10:06:18
CreateThread()里的六個參數里的第3個和第四個參數(LPTHREAD_START_ROUTINE lpStartAddress和 LPVOID lpParameter)要怎么填?另外還要定義什么東西?還有填進去的東西到底是什么意思?
查看完整描述

3 回答

?
小唯快跑啊

TA貢獻1863條經驗 獲得超2個贊

一、Windows API函數。該函數在主線程的基礎上創建一個新線程。微軟在Windows API中提供了建立新的線程的函數CreateThread。

二、CreateThread將在主線程的基礎上創建一個新線程,大致做如下步驟:


1.在內核對象中分配一個線程標識/句柄,可供管理,由CreateThread返回


2.把線程退出碼置為STILL_ACTIVE,把線程掛起計數置1


3.分配context結構


4.分配兩頁的物理存儲以準備棧,保護頁設置為PAGE_READWRITE,第2頁設為PAGE_GUARD


5.lpStartAddr和lpvThread值被放在棧頂,使它們成為傳送給StartOfThread的參數


6.把context結構的棧指針指向棧頂(第5步)指令指針指向startOfThread函數

三、MSDN中CreateThread原型:


HANDLE CreateThread(


LPSECURITY_ATTRIBUTES lpThreadAttributes,//SD


SIZE_T dwStackSize,//initialstacksize


LPTHREAD_START_ROUTINE lpStartAddress,//threadfunction


LPVOID lpParameter,//threadargument


DWORD dwCreationFlags,//creationoption


LPDWORD lpThreadId//threadidentifier


)


processthreadsapi.h中CreateThread原型:


WINBASEAPI


_Ret_maybenull_


HANDLE


WINAPI


CreateThread(


_In_opt_LPSECURITY_ATTRIBUTES lpThreadAttributes,


_In_SIZE_T dwStackSize,


_In_LPTHREAD_START_ROUTINE lpStartAddress,


_In_opt___drv_aliasesMemLPVOID lpParameter,


_In_DWORD dwCreationFlags,


_Out_opt_LPDWORD lpThreadId


);


四、示例:



查看完整回答
反對 回復 2019-03-27
?
郎朗坤

TA貢獻1921條經驗 獲得超9個贊

關于六個參數:第一個是所創線程的安全屬性,多設置為NULL; 第二個是所創線程堆棧的大小,多設為0; 第三個是你創建的線程的地址;(此處應為你的線程函數的函數名) 第四個是傳遞給你的線程函數的參數; 第五個是表示你創建的線程是否立即執行,設為0則立即執行; 第六個則是你創建線程的ID號,設為NULL就行。關于線程你要知道他有一個對應的線程函數,你創建線程后即執行你的函數(若你指定第五個參數為0立即執行,所執行的函數即為第三個參數)對于二樓他設置了一個等待,若無此等待可能會導致創建線程的函數已經退出,而你的線程卻還在運行。

查看完整回答
反對 回復 2019-03-27
  • 3 回答
  • 0 關注
  • 1739 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號