1.C r e a t e T h r e a d函數是用來建立線程的Wi n d o w s函數。不過,如果你正在編寫C / C + +代碼,決不應該調用C r e a t e T h r e a d。相反,應該使用Visual C++運行期庫函數_ b e g i n t h r e a d e x.原因比較簡單,作業系統並不知道每種語言對堆棧空間的管理,調用CPP的_ b e g i n t h r e a d e x函數會調用CreateThread函數建立線程,
2.應該考慮的第一件事情是,“為什麼必須將一個庫用於單線程應用程式,而將另一個庫用於多線程應用程式?”。原因是:運行期庫的發明者沒有考慮到將C運行期庫用於多線程應用程式
3.建立這兩個函數的目的是用來執行_ b e g i n t h r e a d e x和_ e n d t h r e a d e x函數的功能。但是,如你所見,_ b e g i n t h r e a d函數的參數比較少,因此位元性全面的_ b e g i n t h r e a d e x函數受到更大的限制
3.ResumeThread 運行和掛起進程
SuspendThread
4.SuspendProcess暫停進程中所有線程
5.可以將0傳遞給S l e e p。這將告訴系統,調用線程將釋放剩餘的時間片,並迫使系統調度另一個線程。但是,系統可以對剛剛調用S l e e p的線程重新調度
6.Wi n d o w s提供了一個稱為G e t T h r e a d Ti m e s的函數 獲得線程已耗用時間
7.原子操作 : InterlockedExchangeAdd
8.Wi n d o w s確實提供了其他一些方法,以便在進程之間進行資料通訊,但是這些方法都是使用記憶體對應檔來實現的,這使得記憶體對應檔成為單個電腦上的多個進程互相進行通訊的最有效方法。注意一下了,記憶體映射應當是目前單機上進程間通訊最有效方法了 下面是記憶體映射的主要方法:
若要使用記憶體對應檔,必須執行下列操作步驟:
1) 建立或開啟一個檔案核心對象,該對象用於標識磁碟上你想用作記憶體對應檔的檔案。
2) 建立一個檔案對應核心對象,告訴系統該檔案的大小和你打算如何訪問該檔案。
3) 讓系統將檔案對應物件的全部或一部分映射到你的進程地址空間中。
當完成對記憶體對應檔的使用時,必須執行下面這些步驟將它清除:
1) 告訴系統從你的進程的地址空間中恢復檔案映射核心對象的映像。
2) 關閉檔案對應核心對象。
3) 關閉檔案核心對象
注意一點是:如果調用C r e a t e F i l e M a p p i n g函數,傳遞PA G E _ R E A D W R I T E標誌,那麼系統將設法確保磁碟上的相關資料檔案的大小至少與d w M a x i m u m S i z e H i g h和
d w M a x i m u m S i z e L o w參數中設定的大小相同。如果該檔案小於設定的大小, C r e a t e F i l e M a p p i n g函數將擴充該檔案的大小,使磁碟上的檔案變大。這種擴充是必要的,這樣,當以後將該檔案作為記憶體對應檔使用時,實體儲存體器就已經存在了。這樣可可以提高大檔案操作的效率。
如果互相進行通訊的所有進程都在同一台電腦上的話,上面提到的所有機制均使用記憶體對應檔從事它們的煩瑣工作。如果要求達到較高的效能和較小的開銷,記憶體對應檔是舉手可得的最佳機制。方法如下:
static HANDLE s_hFileMap = NULL;
s_hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL,
PAGE_READWRITE, 0, 4 * 1024, TEXT("MMFSharedData")); 這裡的MMFSharedData就進程間共用資料的標識了
9.