一、問題的提出
編寫乙個耗時的單執行緒程式:
新建乙個基於對話方塊的應用程式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執行緒的...