c用Windows API CreateThread函式如何建立的執行緒

時間 2021-08-13 14:32:12

1樓:何度千尋

微軟在windows api中提供了建立新的執行緒的函式createthread。

概述:當使用createprocess呼叫時,系統將建立一個程序和一個主執行緒。createthread將在主執行緒的基礎上建立一個新執行緒,大致做如下步驟:

在核心物件中分配一個執行緒標識/控制代碼,可供管理,由createthread返回

把執行緒退出碼置為still_active,把執行緒掛起計數置1

分配context結構

分配兩頁的物理儲存以準備棧,保護頁設定為page_readwrite,第2頁設為page_guard

lpstartaddr和lpvthread值被放在棧頂,使它們成為傳送給startofthread的引數

把context結構的棧指標指向棧頂(第5步)指令指標指向startofthread函式

msdn中createthread原型:

handle createthread(

lpsecurity_attributes lpthreadattributes,

dword dwstacksize,

lpthread_start_routine lpstartaddress,

lpvoid lpparameter,

dword dwcreationflags,

lpdword lpthreadid);

引數說明:

lpthreadattributes:指向security_attributes型態的結構的指標。在windows 98中忽略該引數。

在windows nt中,它被設為null,表示使用預設值。

dwstacksize:執行緒堆疊大小,一般=0,在任何情況下,windows根據需要動態延長堆疊的大小。

lpstartaddress,指向執行緒函式的指標,形式:@函式名,函式名稱沒有限制,但是必須以下列形式宣告:dword winapi threadproc (pvoid pparam) ,格式不正確將無法呼叫成功。

lpparameter:向執行緒函式傳遞的引數,是一個指向結構的指標,不需傳遞引數時,為nil。

dwcreationflags :執行緒標誌,可取值如下

create_suspended: 建立一個掛起的執行緒

0 :建立後立即啟用。

lpthreadid:儲存新執行緒的id。

返回值:

函式成功,返回執行緒控制代碼;函式失敗返回false。

函式說明:

建立一個執行緒。

語法

一般並不推薦使用 createtheard函式,而推薦使用rtl 庫裡的system單元中定義的 begintheard函式,因為這除了能建立一個執行緒和一個入口函式以外,還增加了幾項保護措施。

2樓:解憂書屋

createthread

微軟在windows api中提供了建立新的執行緒的函式createthread,

概述:當使用createprocess呼叫時,系統將建立一個程序和一個主執行緒。createthread將在主執行緒的基礎上建立一個新執行緒,大致做如下步驟:

1在核心物件中分配一個執行緒標識/控制代碼,可供管理,由createthread返回

2把執行緒退出碼置為still_active,把執行緒掛起計數置1

3分配context結構

4分配兩頁的物理儲存以準備棧,保護頁設定為page_readwrite,第2頁設為page_guard

5lpstartaddr和lpvthread值被放在棧頂,使它們成為傳送給startofthread的引數

6把context結構的棧指標指向棧頂(第5步)指令指標指向startofthread函式

msdn中createthread原型:

handle createthread(

lpsecurity_attributes lpthreadattributes,

dword dwstacksize,

lpthread_start_routine lpstartaddress,

lpvoid lpparameter,

dword dwcreationflags,

lpdword lpthreadid);

引數說明:

lpthreadattributes:指向security_attributes型態的結構的指標。在windows 98中忽略該引數。

在windows nt中,它被設為null,表示使用預設值。

dwstacksize,執行緒堆疊大小,一般=0,在任何情況下,windows根據需要動態延長堆疊的大小。

lpstartaddress,指向執行緒函式的指標,形式:@函式名,函式名稱沒有限制,但是必須以下列形式宣告:

dword winapi threadproc (pvoid pparam) ,格式不正確將無法呼叫成功。

lpparameter:向執行緒函式傳遞的引數,是一個指向結構的指標,不需傳遞引數時,為nil。

dwcreationflags :執行緒標誌,可取值如下

create_suspended: 建立一個掛起的執行緒

0 :建立後立即啟用。

lpthreadid:儲存新執行緒的id。

返回值:

函式成功,返回執行緒控制代碼;函式失敗返回false。

函式說明:

建立一個執行緒。

語法

一般並不推薦使用 createtheard函式,而推薦使用rtl 庫裡的system單元中定義的 begintheard函式,因為這除了能建立一個執行緒和一個入口函式以外,還增加了幾項保護措施。

3樓:匿名使用者

c#裡面的thread類不是非常好用嗎,還用這個幹嗎。

如何在windows系統上用c++建立多執行緒

4樓:匿名使用者

waitformultipleobject***(sizeof(hthreads), hthreads, false, infinite, false);

//執行緒資源釋放

closehandle(hthreads[0]);

closehandle(hthreads[1]);

return 0;}

5樓:匿名使用者

dword winapi sumthread(lpvoid lp)//求和線

程return 0;//執行緒返回

}dword winapi multhread(lpvoid lp)//求階乘執行緒

return 0;

}dword winapi printthread(lpvoid lp)//列印執行緒

void main()

c++ 建立執行緒用createthread後,執行緒直接就開始執行了嗎?還是還要再給它一個命令才能執行?

6樓:試圖製造混亂

這要看你createtheread時的引數如何設的,handle createthread(

lpsecurity_attributes lpthreadattributes, // sd

dword dwstacksize, // initial stack size

lpthread_start_routine lpstartaddress, // thread function

lpvoid lpparameter, // thread argument

dword dwcreationflags, // creation option

lpdword lpthreadid // thread identifier

);第五個引數dwcreationflags :執行緒標誌,可取值如下

(1)create_suspended(0x00000004):建立一個掛起的執行緒,需要resumethread喚醒

(2)0:表示建立後立即啟用。

vc++中通過createthread建立的執行緒,當執行緒入口函式執行完後,執行緒自己會關閉嗎?

7樓:匿名使用者

不會自己關閉來的。

正確源的做法是:

// 儲存執行緒

bai控制代碼du

handle hthread = createthread(.....)

// 等待執行緒完成zhi,如果是多執行緒的,需要呼叫waitformultipleobjects

waitforsingleobjects(max_threads,hthread,true,infinite);

// 最後dao關閉控制代碼

closehandle(hthread );

8樓:匿名使用者

執行緒函式結束 執行緒就結束 當然是關閉了; 但是 執行緒控制代碼要手動closehandle的 親

1 1 2怎麼用c語言程式設計,1 1 2怎麼用C語言程式設計

農民工談三農 c程式 內容如下 include main 然後按提示輸入 1 1 就會顯示 a b 2 程式設計完成! 曦月 include main include stdio.h main 獵戶座 int a a 1 1 和同人女一張床 include void main include std...

用C語言如何求解,用C語言如何求解1 2 2 3 3 4 4 5 5 6?

main printf f sum getch 測試過了 好用 寫了一個函式,這樣如果要對不同的數求值,只要改變傳入引數就可以了,include stdio.h double myfun int min,int max return s 例子,求證,可以改變不同數來求證 main include s...

維他命C有啥用 維C有什麼用?

美白,抗氧化,促進新陳代謝。維c有什麼用?服用維生素c有許多好處 第。一 維生素c可以增強人體的免疫力,殺滅多種入侵的細菌,對於身體的損傷有很好的修復作用。第。二 維生素c也稱抗壞血酸,可以抗壞血病。第。三 還能夠美白養顏,對於提高機體的抗病毒能力有一定的好處和療效。但是如果經常吃維生素c,也有一定...