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 ...