Windows 多執行緒整理

2021-08-23 14:01:58 字數 1983 閱讀 4981

主要問題有

1. 執行緒的建立

2.執行緒的銷毀

3.執行緒同步,通訊

可以通過以下幾種方法建立乙個執行緒:

1、createthread

2、_beginthread

3、_beginthreadex

4、afxbeginthread

第一種 windows api

handlecreatethread(pl_security_attibute plsa, dwod cbstack, lp_thread_start_routine lpst, lpvoid lpvthreadparam,  dwod fdwcreate, lpword lpidthread);

執行緒函式定義    dwod threadfunc(lpvoid param);

第二中和第三種

引用標頭檔案:

#include

函式原型:

uintptr_t_beginthread( void( *start_address )( void * ),

unsigned stack_size,

void *arglist );

引數:start_address:新執行緒的起始位址 ,指向新執行緒呼叫的函式的起始位址

stack_size:新執行緒的堆疊大小,可以為0

arglist: 傳遞給執行緒的引數列表,無引數是為null 

返回值:

假如成功,函式將返回乙個處理資訊對這個新建立的執行緒。如果失敗_beginthread將返回-1。

unsigned long_beginthreadx(void* security, 

unsigned stack_size, 

unsigned (__stdcall *start_addr)(void*), 

void* arglist, 

unsigned initflag, 

unsigned* threadaddr);

引數:可參考createthread函式的引數

返回值:

與_beginthread()不同的是:_beginthread返回-1表示失敗, 而_beginthreadex()返回0表示失敗!

其實windows只提供了乙個建立執行緒的方法,就是createthread,後面三個函式都是由createthread間接得到。

1、_beginthread和_beginthreadex的區別

首先我們看看這兩個函式都幹了什麼:

uintptr_r __cdecl _beginthreadex(...)

然後再看看這兩個函式有什麼不同

(1)引數列表不同, ex版本的引數和createthread差不多:

(2)二者在初始化ptd失敗時返回的值不同

(3)_beginthread的引數缺少安全描述符. 而且它是建立執行緒的時候先以掛起狀態建立 (createthread會填充ptd->_thandle和ptd->_tid) 然後再resumethread。_beginthread是根據傳進來的引數建立執行緒

(4)失敗返回值不同,ex版本的與windows api createthread返回值是一直的,這也是提倡使用後者的原因之一

2、createthread()、_beginthreadex()及、afxbeginthread()

createthread時windows api介面函式,_beginthreadex函式是c/c++執行庫提供的函式,從 _beginthreadex函式的源**,可以看出它的主要動作是:增加了乙個名為ptd的_ptiddata的結構的處理,然後在呼叫createthread函式。_ptiddata是每個執行緒都擁有自己的專用的資料結構。afxbeginthread是mfc封裝的啟動執行緒的函式,裡面包含了很多和mfc相關的啟動資訊,而且封裝了一些常用的操作,使用起來也比較簡便。而用另外兩個函式就需要程式設計師對型別,安全性檢查進行更多的思考!

引用位址 

多執行緒整理01 多執行緒概述

什麼是程式?程式是一段由作業系統執行的 什麼是程序?程序是程式執行的過程,或者說正在被執行的一道程式,乙個程序由乙個或者多個執行緒組成 什麼是執行緒?執行緒是程序的執行部分,每個執行緒都有各自的堆疊空間,堆疊是私有的,而執行緒共享程序內的其他資源 什麼是併發和並行 併發 如果只有單個cpu的話,程式...

多執行緒 待整理

一些零散的記錄,有空再整理 suspendthread和resumethread的作用其實很簡單,他們都是通過執行緒的handle到執行緒的資料結構中將乙個計數的變數 只有乙個byte大小的int變數 進行加一減一的操作,可以簡單的認為 dword suspendthread handle hthr...

Java 多執行緒整理

1.多執行緒是非同步的,順序並非執行緒執行順序,執行緒被呼叫的時機是隨機的。public class mythread extends thread public class multiprocess 執行結果 先列印了main函式的name,後執行start 方法 備註 通知執行緒規劃期此執行緒已...