天天看點

程序和線程 一 程序的基本資訊和通信

         在所做的項目中,我覺得就是這樣幾個子產品(1.界面布置   2.資料庫操作   3.網絡通信    4.程序和多線程的處理)。每個子產品的好壞都決定着整個項目。我自己覺得多線程處理學的最差,那麼就從你開始了(總結和再學習)。

       在我們使用電腦的過程中會發現,當我們點選.exe檔案時,就會運作一個程式,在任務管理器中會在程序一欄中找到我們對應的程序(PID等資訊),但在沒有點選時,他們隻是以檔案的形式存放在我們的電腦中,他們是如何運作的呢?

      先來看一下程序的定義:從開發者的角度來了解的話,程序就是一個容器,其中包括了代碼段、資料段、程序段、程序使用的資源、環境代碼塊、線程等内容。也就是說程序被建立後隻是提供了空間,不會執行任何動作,也就是所謂的程序是不活潑的.那麼程式也就是通過線程來服務的了。一旦一個程序得到了建立,就會有一個主線程被建立來執行程序位址空間中的代碼。

      對于程序的操作:1.程序的建立(我所在的開發環境為VC6.0),可以建立子程式來直接調用計算機中的應用程式(其實我覺得沒什麼實用性的,無非就是加個按鈕可以快捷的打開某個應用程式)     2.程序的終止: 方法有三種  一、通過主線程的推出(ExitThread(DWORD dwExitCode))   二、退出程序(ExitProcess())  三、強行退出程序(TerminateProcess(HANDLE   hProcess,UINT uExitCode);)  通常在程式中會定義一個私有變量來,來記錄程序的句柄。

      程序間的通信:每一個程序都有自己的一個4GB的虛拟位址空間,那麼通信就變得困難,而windows提供了記憶體映射檔案機制,實作了程序間的通信(實質:一個程序通過建構檔案映射對象在實體存儲器中擷取一個(實體記憶體)後,其他的程序能夠根據檔案映射的名稱将自己的虛拟記憶體位址映射到同一個實體記憶體中,這樣就實作了通信)。相應的有下面一組API函數:1.CreateFileMapping函數 (用于建立記憶體映射檔案對象)   2.MapViewOfFile 函數(用于将記憶體映射檔案映射到程序的虛拟位址空間中) 3.OpenFileMapping函數(根據記憶體映射檔案名稱傳回記憶體映射檔案句柄)。  4.UnmapViewOfFile 函數(用于釋放程序位址空間與記憶體映射檔案的關聯)。

實作了一下在MFC中,以文本框的形式,進行兩個程序間資料的通信,關鍵在于,使用相應的API函數時,對函數對應參數的熟悉和相應函數的傳回值的了解,是程式的關鍵。