handle createthread(
_in_opt_ lpsecurity_attributes lpthreadattributes,
//security_attributes
結構指定了這個執行緒的安全屬性,如果填
null
則就以預設的安全描述子建立,並且返回的控制代碼不會被繼承。
_in_size_t dwstacksize,
//
執行緒的堆疊大小
(單位是位元組
),如果為
0則預設和主線程一樣大。堆疊再程序的記憶體空間內自動分配並在程序結束時釋放。如有必要堆疊大小可以增加。
//createthread
在試圖分配大小為
dwatacksize
位元組數的記憶體,並在可用記憶體不足時返回失敗訊息。
_in_lpthread_start_routine lpstartaddress,
//
指向執行緒所需要執行的應用程式提供的函式,同時這也代表執行緒開始的位址。函式接受乙個
32位的引數並返回乙個
32位值
_in_opt_ __drv_aliasesmem lpvoid lpparameter,
//
指定乙個傳遞給執行緒的
32位引數值
_in_dword dwcreationflags,
//
指定乙個附加標誌來控制線程的建立。如果
create_suspended
標誌被定義,執行緒就以掛起狀態建立,即直到
resumethread()
函式被呼叫之前都不執行
//
如果該值為
0,執行緒在建立後立即開始執行
_out_opt_ lpdword lpthreadid
//
指向乙個儲存執行緒的id,
32位變數
)
如果執行成功,其返回值是指向下乙個新執行緒的控制代碼。如果失敗,將返回
null
。
當執行完乙個執行緒後,應該關閉該執行緒的控制代碼。
closehandle(),
該函式使用
createthread()
返回點控制代碼,並將對應核心物件的引用計數器加減1。
這並不是強制關閉乙個執行緒,而是告訴系統改執行緒處於結束時執行狀態。
bool closehandle( _in_ handle hobject )成功返回true,否者false
測試**1當執行緒迴圈的次數小於主線程次數時
#include #include using namespace std;
dword winapi print_thread(lpvoid data)
{cout<<"開始執行緒\n";
for(int index=0;index<25; index++)//迴圈25次
{cout<<"thread_"<<(int)data<<"_"<#include using namespace std
dword winapi print_thread(lpvoid data)
{cout<<"開始執行緒\n";
for(int index=0; index<50;index++)//迴圈50次
{cout<<"thread_"<<(int)data<<"_"<
只看看**1可能沒有什麼特別的發現,所以我寫了**2與其進行對比。細心的讀者會發現我只是改了主線程和子執行緒for迴圈的次數。
對比兩個**你會發現,當主線程結束時,子執行緒還在繼續,由於我加了system("pause");所以第乙個主線程的for迴圈結束後,程式沒有直接退出,然而我們才能看到子執行緒還在繼續跑直到結束才停止。如果你將system(
"pause");你會發現,當主線程執行完後程式直接退出,不會等待子執行緒結束。
如何建立乙個簡單的執行緒
在symbian中,用rthread來操作執行緒,乙個rthread物件代表乙個執行緒的控制代碼。常用rthead物件來建立或操作其他執行緒。rthread的基類是rhandlebase類,該類封裝了控制代碼的行為。rthread,rprocess,rmutex和rsession base都繼承自r...
乙個簡單的多執行緒
頭部 type tmythread class tthread protected procedure execute override end procedure tmythread.execute begin coinitialize nil 如果不加這句,會提示未呼叫coinitialize ...
c 乙個簡單的執行緒
c 本身並沒有提供任何多執行緒機制,但是在windows下,我們可以呼叫sdk win32 api來編寫多執行緒的程式 msdn中createthread原型 1 2 3 4 5 6 7 8 handlecreatethread lpsecurity attributeslpthreadattrib...