Windows多執行緒程式設計

2021-06-05 17:47:33 字數 1297 閱讀 7080

一、問題的提出

編寫乙個耗時的單執行緒程式:

新建乙個基於對話方塊的應用程式singlethread,在主對話方塊idd_singlethread_dialog新增乙個按鈕,id為idc_sleep_six_second,標題為「延時6秒」,新增按鈕的響應函式,**如下:

void csinglethreaddlg::onsleepsixsecond()

編譯並執行應用程式,單擊「延時6秒」按鈕,你就會發現在這6秒期間程式就象「宕機」一樣,不在響應其它訊息。為了更好地處理這種耗時的操作,我們有必要學習——多執行緒程式設計。

二、多執行緒概述

程序和執行緒都是作業系統的概念。程序是應用程式的執行例項,每個程序是由私有的虛擬位址空間、**、資料和其它各種系統資源組成,程序在執行過程中建立的資源隨著程序的終止而被銷毀,所使用的系統資源在程序終止時被釋放或關閉。

執行緒是程序內部的乙個執行單元。系統建立好程序後,實際上就啟動執行了該程序的主執行執行緒,主執行執行緒以函式位址形式,比如說main或winmain函式,將程式的啟動點提供給windows系統。主執行執行緒終止了,程序也就隨之終止。

每乙個程序至少有乙個主執行執行緒,它無需由使用者去主動建立,是由系統自動建立的。使用者根據需要在應用程式中建立其它執行緒,多個執行緒併發地執行於同乙個程序中。乙個程序中的所有執行緒都在該程序的虛擬位址空間中,共同使用這些虛擬位址空間、全域性變數和系統資源,所以執行緒間的通訊非常方便,多執行緒技術的應用也較為廣泛。

win32 sdk函式支援進行多執行緒的程式設計,並提供了作業系統原理中的各種同步、互斥和臨界區等操作。visual c++ 6.0中,使用mfc類庫也實現了多執行緒的程式設計,使得多執行緒程式設計更加方便。

三、win32 api對多執行緒程式設計的支援

win32 提供了一系列的api函式來完成執行緒的建立、掛起、恢復、終結以及通訊等工作。下面將選取其中的一些重要函式進行說明。

1、handle createthread(lpsecurity_attributes lpthreadattributes,

dword dwstacksize,

lpthread_start_routine lpstartaddress,

lpvoid lpparameter,

dword dwcreationflags,

lpdword lpthreadid);

該函式在其呼叫程序的程序空間裡建立乙個新的執行緒,並返回已建執行緒的控制代碼,其中各引數說明如下:

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...

windows多執行緒程式設計2

強調 win32說明檔案一再強調執行緒分為gui執行緒和worker執行緒兩種。gui執行緒 負責建造視窗以及處理主訊息迴圈。worker 負責執行純粹運算工作,如重新 計算或重新編頁等等,它們會導致主線程的訊息佇列失去反應。一般而言,gui 執行緒絕不會去做那些不能夠馬上完成的工作。gui執行緒的...