溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C++中的多線程是什么

發(fā)布時(shí)間:2021-08-31 11:24:16 來(lái)源:億速云 閱讀:154 作者:chen 欄目:編程語(yǔ)言

這篇文章主要講解了“C++中的多線程是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“C++中的多線程是什么”吧!

  在Windows平臺(tái),WindowsAPI提供了對(duì)多線程的支持。前面進(jìn)程和線程的概念中我們提到,一個(gè)程序至少有一個(gè)線程,這個(gè)線程稱為主線程(mainthread),如果我們不顯示地創(chuàng)建線程,那我們產(chǎn)的程序就是只有主線程的間線程程序。

下面,我們看看Windows中線程相關(guān)的操作和方法:

  CreateThread與CloseHandle

  CreateThread用于創(chuàng)建一個(gè)線程,其函數(shù)原型如下:

  HANDLEWINAPICreateThread(

  LPSECURITY_ATTRIBUTESlpThreadAttributes,//線程安全相關(guān)的屬性,常置為NULL

  SIZE_TdwStackSize,//新線程的初始化棧在大小,可設(shè)置為0

  LPTHREAD_START_ROUTINElpStartAddress,//被線程執(zhí)行的回調(diào)函數(shù),也稱為線程函數(shù)

  LPVOIDlpParameter,//傳入線程函數(shù)的參數(shù),不需傳遞參數(shù)時(shí)為NULL

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

  LPDWORDlpThreadId//傳出參數(shù),用于獲得線程ID,如果為NULL則不返回線程ID

  );

說(shuō)明:

  lpThreadAttributes:指向SECURITY_ATTRIBUTES結(jié)構(gòu)的指針,決定返回的句柄是否可被子進(jìn)程繼承,如果為NULL則表示返回的句柄不能被子進(jìn)程繼承。

  dwStackSize:線程棧的初始化大小,字節(jié)單位。系統(tǒng)分配這個(gè)值對(duì)

  lpStartAddress:指向一個(gè)函數(shù)指針,該函數(shù)將被線程調(diào)用執(zhí)行。因此該函數(shù)也被稱為線程函數(shù)(ThreadProc),是線程執(zhí)行的起始地址,線程函數(shù)是一個(gè)回調(diào)函數(shù),由操作系統(tǒng)在線程中調(diào)用。線程函數(shù)的原型如下:

  DWORDWINAPIThreadProc(LPVOIDlpParameter);//lpParameter是傳入的參數(shù),是一個(gè)空指針

  lpParameter:傳入線程函數(shù)(ThreadProc)的參數(shù),不需傳遞參數(shù)時(shí)為NULL

  dwCreationFlags:控制線程創(chuàng)建的標(biāo)志,有三個(gè)類型,0:線程創(chuàng)建后立即執(zhí)行線程;CREATE_SUSPENDED:線程創(chuàng)建后進(jìn)入就緒狀態(tài),直到線程被喚醒時(shí)才調(diào)用;STACK_SIZE_PARAM_IS_A_RESERVATION:dwStackSize參數(shù)指定線程初始化棧的大小,如果STACK_SIZE_PARAM_IS_A_RESERVATION標(biāo)志未指定,dwStackSize將會(huì)設(shè)為系統(tǒng)預(yù)留的值。

  返回值:如果線程創(chuàng)建成功,則返回這個(gè)新線程的句柄,否則返回NULL。如果線程創(chuàng)建失敗,可通過(guò)GetLastError函數(shù)獲得錯(cuò)誤信息。

  BOOLWINAPICloseHandle(HANDLEhObject);//關(guān)閉一個(gè)被打開的對(duì)象句柄可用這個(gè)函數(shù)關(guān)閉創(chuàng)建的線程句柄,如果函數(shù)執(zhí)行成功則返回true(非0),如果失敗則返回false(0),如果執(zhí)行失敗可調(diào)用GetLastError.函數(shù)獲得錯(cuò)誤信息。

感謝各位的閱讀,以上就是“C++中的多線程是什么”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)C++中的多線程是什么這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI