c 乙個簡單的執行緒

2021-06-22 00:38:38 字數 2568 閱讀 9855

c++本身並沒有提供任何多執行緒機制,但是在windows下,我們可以呼叫sdk win32 api來編寫多執行緒的程式

msdn中createthread原型:

1

2

3

4

5

6

7

8

handlecreatethread(

lpsecurity_attributeslpthreadattributes,//sd

size_tdwstacksize,//initialstacksize

lpthread_start_routinelpstartaddress,//threadfunction

lpvoidlpparameter,//threadargument

dworddwcreationflags,//creationoption

lpdwordlpthreadid//threadidentifier

);

引數的意義:

1 lpthreadattributes:指向

security_attributes

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

在windows nt中,null使用預設安全性,不可以被子執行緒繼承,否則需要定義乙個結構體將

它的binherithandle成員初始化為true

2 dwstacksize,設定初始棧的大小,以位元組為單位,如果為0,

那麼預設將使用與呼叫該函式的執行緒相同的棧空間大小。

任何情況下 windows根據需要動態延長

堆疊的大小。

3 lpstartaddress,指向執行緒函式的

指標,形式:@函式名,函式名稱沒有限制,但是必須以下列形式宣告:

dword winapi 函式名 (lpvoid lpparam) ,格式不正確將無法呼叫成功。

也可以直接呼叫void型別

但lpstartaddress要這樣通過lpthread_start_routine轉換如:

(lpthread_start_routine)myvoid

void myvoid()

4 lpparameter:向執行緒函式傳遞的引數,是乙個指向結構的

指標,不需傳遞引數時,為null。

5

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

(1)create_suspended(0x00000004):建立乙個掛起的執行緒,

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

(3)stack_size_param_is_a_reservation(0x00010000):

dwstacksize引數指定初始的保留堆疊的大小,

否則,dwstacksize指定提交的大小。該標記值在windows 2000/nt and windows me/98/95上不支援。

6  lpthreadid:儲存新執行緒的id。

返回值:

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

若不想返回執行緒id,設定值為null。

函式說明

建立乙個執行緒。

語法:hthread = createthread (&security_attributes, dwstacksize, threadproc,pparam, dwflags, &idthread) ;

一般並不推薦使用 createthread函式,而推薦使用rtl

庫里的system單元中定義的 beginthread函式,因為這除了能建立乙個執行緒和乙個入口函式以外,還增加了幾項保護措施。

在mfc程式中,應該呼叫afxbeginthread函式,在

visual c++程式中應呼叫_beginthreadex函式。

乙個簡單的執行緒例子:

// namespacetest.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

dword winapi fun(lpvoid lpparamter)

}int _tmain(int argc, _tchar* argv)

return 0;

}

C 乙個簡單的多執行緒例子

乙個是窗體 乙個是class 直接上 了,先來窗體的吧。窗體 引入命名空間 using system.threading 完整 namespace threadexample private void btn start click object sender,eventargs e private...

C 乙個簡單多執行緒的例項

很多初學者聽到執行緒會覺得晦澀難懂,很多資料一堆專有名詞也是讓人心煩意亂,本著學習加分享的態度,這裡做乙個簡單的例項分享幫助初學者們初識多執行緒。首先大概講述一下多執行緒和多程序的區別,任務管理器裡各種不同的程序就是多程序,或者是你同時執行多個 exe 程式就可以理解為多程序,多程序是要更多消耗cp...

乙個簡單的多執行緒

頭部 type tmythread class tthread protected procedure execute override end procedure tmythread.execute begin coinitialize nil 如果不加這句,會提示未呼叫coinitialize ...