013 Windows進程及線程

來源:互聯網
上載者:User

標籤:資料   靜態   block   通過   ext   引用   turn   對話   src   

Windows 進程及線程

  ● 進程的組成
    ○ 進程是“惰性”的,進程要做的任何事情,都必須讓線程來運行,線程執行進程地址空間中包含的代碼

      ? 進程本身無法運行任何東西

      ? 進程劃定一個地區,存在一些代碼,這些代碼都是靜態存在的


    ○ 一個進程可以擁有多個線程,所有的線程都能夠在進程的地址弓箭中“同時”運行代碼,每個線程都有他自己的一組CPU寄存器以及自己的堆棧。

      ? 一個進程最少可以有一個線程

      ? 如果一個進程裡面沒有線程會被銷毀


    ○ 每個進程必須有一個線程,當系統建立一個進程時,會自動建立一個線程。這個線程我們稱為主線程。如果沒有線程要執行進程地址空間中的代碼,進程就失去了存在的意義,此時系統會自動銷毀進程以及它的地址空間

      ? 線程執行CPU的代碼

       ? Windows是一個支援多進程技術的作業系統 


    ○ 作業系統會以輪詢的方式為每一個線程分配CPU時間片,從營造出“並行”的假象。

    ○ 如果電腦擁有多個CPU,作業系統會更複雜的方式為線程分配CPU時間。



  ● 核心對象
    ○ 作業系統用來管理進程


  ● 地址空間
    ○ 包含了可執行檔及DLL模組的代碼和資料


應用程式類型

  ● 控制台使用者介面
    ○ 控制台程式則是基於文本的它們一般不會建立視窗或進程訊息,而且不需要GUI

      ? 通過文本互動的程式都叫做CUI

      ? 基於文本操作的叫做CUI

      ? 並不是說CMD執行的程式就叫做CUI

//我們現在學習的win32api 都是跟C 函數模式的//跟C++關係不大,因為C++是類封裝 

 

  ● 圖形化使用者介面
    ○ GUI程式一個圖形化的前端,它可以建立視窗,可以擁有菜單,能通過對話方塊與使用者互動,還能使用所有標磚 “視窗化” 的東西 Windows 的幾乎所有附件應用程式都是GUI程式

  ● 區別

    ○ 1.在 VS中,CUI程式的連結器開關位 /SUBSYSTEM:CONSOLE,GUI程式的連結器開關位 /SUBSYSTEM:WINDOWS.在載入時,會擷取此值,如果是一個文本控制台視窗,作業系統會使用命令提示字元啟動這個程式,否則它只是載入這個,由應用程式來管理自己的視窗
    ○ 2.入口函數不同

 

int WINAPI _tWinMain(    HINSTANCE hInstanceExe,    HINSTANCE hPreInstancec,    PTSTR pszCmdLine,    int nCmdShow);
1 int _tmain(2     int argc,3     TCHAR *argv[],4     TCHAR *envp[]5     );

 

    ○ 啟動函數不同,GUI的啟動函數位 WinMainCRTStartup或wWinMainCRtatup,CUI的啟動函數為mainCRTStartup或wmainCStartup

      ? 命令提示字元是一個軟體,完全獨立軟體

      ? 我們開發的程式是另外一個軟體,如果裡面設定了命令列,或者控制台,使用者介面屬性

 

 1 #include <Window.h> 2 #include <tchar.h> 3 //Main        CUI            -> 4 //WinMin    GUI            ->建立或附加一個控制台程式 5  6 //程式 7 //無法解析外部符號 _main,該符號在函數 "int __cdecl invoke main(void)" ([email protected]@YAHXZ)中被引用 8 //找Main函數 9 //無法解析的外部符號 [email protected],該符號在函數 "int __cdecl invoke_main(void)" ([email protected]@YAHXZ) 中被引用10 //找WinMain函數11 //CUI12 int main()13 {14     return 0;15 }16 //GUI程式的連結器開關位17 int WINAPI _tWinMain(18     _In_    HINSTANCE hInstance,        //進程控制代碼19     _In_    HINSTANCE hPrevInstance,      //前一個進程的控制代碼    盡量不要使用 或者不使用20     _In        LPTSTR lpCmdLine,        //命令列21     _In_    int nCmdShow)            //顯示的方式 SW_SHOW SW_HIDE22 {23     return 024 }

 

 

 

 

 1 #include <tchar.h> 2 #include <windows.h> 3  4 #include <stdio.h> 5  6 int main( ) 7 { 8     HINSTANCE hInstance = GetModuleHandle(NULL);        //擷取視窗控制代碼 9                                                             //程式基質0x40000010     printf("0x%x\r\n",hInstance );11     12     TCHAR* const strCommline = GetCommandLine();13             //LPTSTR WINAPI GetCommandLine(void);14     _tprintf(TEXT("%s\r\n"),strCommline);15     int nNumArgv;16     LPWSTR* ppArgv = CommandLineToArgvW( strCommline, &nNumArgv);17     if( ppArgv != NULL)18     {19         for(int nIndex = 0; nIndex < nNumArgv; ++nIndex )20         {21             _tprintf( TEXT("%s\r\n"), ppArgv[nIndex] );22         }23     }24     25 26     system("pause");27     return 0;28 }

 

 

1 //環境變數2 LPTCH strPath = GetEnvironmentString();3 _tprintf(TEXT("%s \r\n"), strPath);4 //FreeEnvironmentStrings();

 

013 Windows進程及線程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.