基於windows的多執行緒程式設計初步介紹

2021-07-06 02:23:59 字數 1606 閱讀 8297

基於windows的多執行緒程式設計

基於windows下的多執行緒程式設計,首先我們需要了解建立執行緒的函式createthread,createthread

將在主線程的基礎上建立乙個新執行緒。

函式原型:

handle createthread(lpsecurity_attributelpthreadattributes,size_tdwstacksize,lpthread_start_routinelpstartaddress,lpvoidlpparameter,

dword

flags,lpdwordlpthreadid)

引數說明:

引數1:指向security_attributes結構體的指標,一般設定該值為null,表示預設的安全性。

引數2:指定初始提交棧的大小,以位元組為單位。系統會將這個值向上四捨五入為系統頁面大小的倍數。頁面是作業系統在管理記憶體時,使用的乙個記憶體單元。不同的cpu的頁面大小是不同的,32位系統的頁面大小為4kb。如果這個值是0或小於預設提交的大小時,預設將使用與呼叫該函式的執行緒相同的棧空間大小。

引數3:指標型別。指向lpthread_start_routine型別的應用函式,表示了執行緒入口函式的位址。

引數4:指定傳遞給執行緒的引數。

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

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

引數5:執行緒標誌。當 flags == create_suspended表示執行緒建立後處於暫停狀態,直到resumethread函式呼叫才啟動執行緒。若flags==0,執行緒建立後立即執行。

引數6:引數6為輸出引數,指向乙個接受執行緒識別符號的變數。當我們建立乙個執行緒時,系統會為這個執行緒分配乙個id號。若不想返回執行緒id,設定值為null。

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

對於單cpu系統,多執行緒的實現是利用時間片交替進行。

#include #include using namespace std;   

dword winapi fun1proc(lpvoid lpparam);

void main()

dword winapi fun1proc(lpvoid lpparam)

{ cout<<"the thread1 is running"<

在主線程中使用closehandle函式關閉控制代碼,並沒有終止新建立的執行緒。關閉控制代碼時,作業系統會遞減新執行緒的執行緒核心物件的使用計數,當使用計數為0,系統會釋放執行緒核心物件。如果在主線程當中,沒有關閉控制代碼,始終會保留乙個引用,這樣執行緒核心物件的使用計數不為0,此時即使我們這個執行緒執行完畢,那麼執行緒核心物件也不會被釋放,直到等到程序終止時候,作業系統才會為殘留物件做清理工作。

不同的執行緒對同一資源進行訪問時候,會出現一些意想不到的錯誤,此時我們需要執行緒間的同步。執行緒間的同步就是保證乙個執行緒在訪問一種資源的時候,其他的執行緒在這個時間段之內不能夠對這個資源進行訪問。

Windows多執行緒程式設計

一 問題的提出 編寫乙個耗時的單執行緒程式 新建乙個基於對話方塊的應用程式singlethread,在主對話方塊idd singlethread dialog新增乙個按鈕,id為idc sleep six second,標題為 延時6秒 新增按鈕的響應函式,如下 void csinglethread...

windows多執行緒程式設計

程序 乙個執行的程式,記憶體,cpu時間等都歸程序所有.執行緒 cpu排程的最小單位,乙個程序內的多個執行緒共享4g記憶體.程式的乙個執行路徑 1.最基礎的使用方法.createthread,exitthread,closehand include include createthread,exit...

Windows多執行緒程式設計

函式原型 handlewinapi createthread lpsecurity attributes lpthreadattributes,size t dwstacksize,lpthread start routine lpstartaddress,lpvoid lpparameter,dw...