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的 親

用c或c寫紙牌遊戲,用C 或C寫紙牌遊戲

不好意思,我幫不到你。但是你可以設你1 52張牌都為字母代替。再為他們附加定義。試試看。include include include include using namespace std struct l 建立連表 l create int group 1,value 1 group4張為一組,...

用c語言程式設計,用c語言如何程式設計?

皇家救星 include include include include void insert int array,int num 將num按遞增順序插到array中 else if array i num if i 29 return for j 28 j i j 將待插入位置後面的元素後移 a...

用c求fibonacci數,用C 求fibonacci數

心動起泡 防守打發揮地方 發寒熱換個服不服 染髮鬼地方個地方 反對個人的恢復供貨單位予以 散分散過分的話應該就 都不敢放那邊發 被非常不錯 用c 編寫的求斐波那契數 include stdafx.h include using namespace std double fibonacci inta ...