多執行緒學習CreatThread

2021-08-16 02:35:25 字數 2361 閱讀 1876

一 學習目的怎樣建立乙個多執行緒

二 軟體vs2008  win32控制台程式

三 注意事項  win32 sdk #include #include ,creatthread()函式應用

注意:此專案為c++個人學習所用,如有錯誤請批評指正;

cpp標頭檔案:#include #include

int g_ivalue =0;//多執行緒安全問題

有關建立執行緒的問題有三種方法:

1.c語言函式,呼叫_beginthread();

2.api函式,呼叫createthread();

3.mfc函式,呼叫afxbeginthread();

推薦使用mfc函式afxbeginthread();

利用mfc裡的afxbeginthread函式能很方便地建立執行緒以及對執行緒進行等待、喚醒等操作。

1、函式原型

cwinthread* afxbeginthread( afx_threadproc pfnthreadproc , lpvoid pparam , int npriority = thread_priority_normal , uint nstacksize = 0 , dword dwcreateflags = 0, lpsecurity_attributes lpsecurityattrs = null);

2、引數說明

(1)返回值:乙個指向新執行緒的執行緒物件。

(2)pfnthreadproc:執行緒的入口函式,宣告一定要如下:uint mythreadfunction( lpvoid pparam );

(3)pparam:傳遞入執行緒的引數,注意它的型別為:lpvoid,所以我們可以傳遞乙個結構體入執行緒。

(4)npriority:執行緒的優先順序,一般設定為 0。讓它和主線程具有共同的優先順序。

(5)nstacksize:指定新建立的執行緒的棧的大小。如果為 0,新建立的執行緒具有和主線程一樣的大小的棧。

(6)dwcreateflags:指定建立執行緒以後,執行緒有怎麼樣的標誌。可以指定兩個值:

<1>create_suspended:執行緒建立以後,會處於掛起狀態,直到呼叫resumethread;

<2>0:建立執行緒後就開始執行。

(7)lpsecurityattrs:指向乙個 security_attributes 的結構體,用它來標誌新建立執行緒的安全性。如果為 null,那麼新建立的執行緒就具有和主線程一樣的安全性。

3、執行緒建立

一般建立過程如下:

先定義乙個工作函式,一般來說你的執行緒就是依照該函式的功能執行任務:

uint mythreadfunction( lpvoid pparam )

然後可以按以下方式建立執行緒:

cwinthread* mythread=afxbeginthread(mythreadfunction , pparam , thread_priority_normal , 0 , 0 , null);

4、執行緒的等待與喚醒

(1)讓執行緒等待(暫時掛起):

mythread->suspendthread();

(2)喚醒暫停的執行緒:

mythread->resumethread();

5、檢視執行緒狀態:

dword code;

getexitcodethread(mythread->m_hthread , &code);

if(code==still_active)

else

6、結束執行緒

terminatethread(mythread->m_hthread , 0);

多執行緒學習

thread和runnable的區別 單繼承模式thread 而 runnable是介面 start 和run的區別 start是乙個執行緒只能啟動,run可以執行多次,並且run是呼叫當前正在執行的執行緒 wait notify object物件所具有的 sleep setpriority 同步機...

多執行緒學習

用 編輯 的多執行緒時用gcc threadtest 1.c 編譯時 一直報錯,報錯如下 tmp ccgko5iu.o 在函式 thread create 中 threadtest 1.c text 0x13b 對 pthread create 未定義的引用 threadtest 1.c text ...

多執行緒學習

簡單學習多執行緒。建立多執行緒有兩種方法。一 繼承thread類。多執行緒練習,通過繼承thread public class testthread extends thread public static void main string argsd 二 實現runnable介面。多執行緒練習。通...