主要問題有
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 方法 備註 通知執行緒規劃期此執行緒已...