第15章
1. 程序從來不執行任何東西,它只是執行緒的容器。若要使程序完成某項操作,它必須擁有乙個在它環境中執行的執行緒,此執行緒負責執行包含在程序的位址空間中的**。
即,真正完成**執行的是執行緒,而程序只是執行緒的容器,或者說是執行緒的執行環境;
2. 頁檔案透明的為應用程式增加了可以使用的記憶體。它通過在磁碟上劃分出一塊空間當做記憶體使用,從而增加了應用程式可以使用的記憶體,我們把這個稱為虛擬記憶體;
3. 新執行緒執行的環境與建立執行緒的環境相同,因此,新執行緒可以訪問程序的核心物件的所有控制代碼、程序中的所有記憶體和在這個相同的程序中所有其他執行緒的堆疊,這使得單個程序中的多個執行緒確實能夠非常容易地互相通訊;
執行緒只有乙個核心物件和乙個棧,保留的記錄很少,因此所需要的記憶體也很少,建立執行緒需要的開銷比程序少。
4. 作業系統為每乙個執行執行緒安排一定的cpu時間----時間片。系統通過一種迴圈的方式為執行緒提供時間片,執行緒在自己的時間內執行;
5. 盡量採用多執行緒的兩個原因:
1. 對程序的建立來說,系統要為程序分配私有的4gb的虛擬位址空間,當然它所佔的資源就比較多,而對於多執行緒來說,多個執行緒是共享同乙個程序的位址空間,所以占用的資源就比較少。
2. 另乙個原因是當程序切換時,需要交換整個位址空間,而執行緒之間的切換只是執行環境的改變,因此效率高;
6. 多執行緒的建立createthread
#include
#include
using namespace std;
dword winapi fun1proc(lpvoid lpparameter);
void main()
handlehthread1;
hthread1=createthread(null,0,fun1proc,null,0,null);
closehandle(hthread1);
cout<< "main thread is running" << endl;
sleep(20);
//執行緒1的入口函式
dword winapi fun1proc(lpvoid lpparameter)
cout<< "thread1 is running " << endl;
cin.get();
return0;
注意引數:頁面是系統管理記憶體時使用的記憶體單位,不同的cpu其頁面大小不同,x86使用的頁面大小事4kb。
倒數第二個引數有兩種取值:
1. create_suspended,那麼執行緒建立後處於暫停狀態,知道程式呼叫了resumethread函式為止;
2. 0,那麼執行緒在建立之後就立即執行了;
為了讓新建立的執行緒能夠得到執行的機會,就需要使主線程暫停使用,即放棄執行的權利,作業系統就會從等待執行的執行緒佇列中選擇乙個執行緒來執行,這時新建立的執行緒就可以得到執行的機會;sleep函式解決
7. 利用互斥物件實現執行緒同步
互斥物件屬於核心物件,它能夠確保執行緒擁有對單個資源的互斥訪問權,互斥物件包含乙個使用數量,乙個執行緒id和乙個計數器。其中id用於標識系統中的哪個執行緒當前擁有互斥物件。
建立互斥物件:createmutex(三個引數)
1. 第乙個為null,讓互斥物件使用預設的安全性;
2. bool型別,指定互斥物件初始的擁有者。如果該值為真,則建立這個互斥物件的執行緒獲得該物件的所有權;
3. 指定互斥物件的名稱,如果為null,則建立乙個匿名的互斥物件;
執行緒必須主動請求共享物件的使用權才能可能獲得該所有權,
呼叫waitforsingleobject函式來實現;(要注意這一對函式的位置)
釋放該物件的所有權:releasemutex函式;
對於互斥物件來說,它是唯一與執行緒相關的核心物件;
誰擁有,就誰釋放;
8. 可以通過命名的互斥物件來實現;
在呼叫createmutex函式建立乙個命名的的互斥物件後,接著呼叫getlasterror函式,如果這個函式返回error_already_exists,就表明先前已經建立了這個命名的互斥物件;也就是表明先前已經有該應用程式的乙個例項在執行了;
9. 在mfc中,載入套接字型檔,並進行版本協商;
afxsocketinit函式,這個函式不需要為工程鏈結ws2_32.lib庫檔案;
它需要包含相應的標頭檔案:afxsock.h
新增到stdafx.h標頭檔案中;它是乙個預編譯標頭檔案,在該檔案中包含了mfc應用程式執行所需的一些必要標頭檔案;
10. 對於網路聊天室程式來說,通常都是採用udp協議來實現的;
11. 呼叫類的成員函式,必須得先產生乙個該類的物件,然後才能呼叫該物件的成員函式;
解決方法:static成員函式;
12.如果單位要求採用完全物件導向的思想來程式設計,也就是說不能使用全域性函式和全域性變數,我們就可以採用靜態成員函式和靜態成員變數的方法來解決問題;
12. 在mfc中,如果需要對控制項進行操作,都是利用控制項所對應的類來完成的,ip控制項對應的mfc類是:cipaddressctrl.這個類裡面有乙個getaddress成員函式;
13.為了讓編輯框控制項接受換行符,必須設定該控制項支援多行資料這一屬性;
第15章 多執行緒
模擬銀行取錢的問題 1.定義乙個account類 1 該account類封裝了賬戶編號 string 和餘額 double 兩個屬性 2 設定相應屬性的getter和setter方法 3 提供無參和有兩個引數的構造器 4 系統根據賬號判斷與使用者是否匹配,需提供hashcode 和equals 方法...
孫鑫VC 第13章文件和序列化
第13章 文件與序列化 1.使用carchive類對檔案進行讀寫操作 carchive類物件將物件資料儲存到永久裝置上,例如磁碟檔案,讓物件資料永續性的過程就稱之為序列化 活序列化 在建立carchive物件之前必須先建立乙個cfile類或者其派生類物件,並且因此存檔物件既可以用來載入資料,也可以用...
孫鑫VC 第17章程序間的通訊
第17章 程序間的通訊 1.當乙個程序啟動後,作業系統為其分配4gb的私有位址空間。位於同乙個程序中的多個執行緒共享同乙個位址空間,因此執行緒之間的通訊非常簡單 2.四種程序間通訊方式 剪下板,匿名管道,命名管道,郵槽 3.如果某個程式已經開啟了剪貼簿,則其他應用程式將不能修改剪下板,直到前者呼叫了...