程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> MFC的進程和線程

MFC的進程和線程

編輯:關於C語言

 

Win32的進程和線程概念

進程是一個可執行的程序,由私有虛擬地址空間、代碼、數據和其他操作系統資源(如進程創建的文件、管道、同步對象等)組成。一個應用程序可以有一個或多個進程,一個進程可以有一個或多個線程,其中一個是主線程。

線程是操作系統分時調度分配CPU時間的基本實體。一個線程可以執行程序的任意部分的代碼,即使這部分代碼被另一個線程並發地執行;一個進程的所有線程共享它的虛擬地址空間、全局變量和操作系統資源。

之所以有線程這個概念,是因為以線程而不是進程為調度對象效率更高:

由於創建新進程必須加載代碼,而線程要執行的代碼已經被映射到進程的地址空間,所以創建、執行線程的速度比進程更快。

一個進程的所有線程共享進程的地址空間和全局變量,所以簡化了線程之間的通訊。

Win32的進程處理簡介

因為MFC沒有提供類處理進程,所以直接使用了Win32 API函數。

進程的創建

調用CreateProcess函數創建新的進程,運行指定的程序。CreateProcess的原型如下:

BOOL CreateProcess(

LPCTSTR lpApplicationName,

LPTSTR lpCommandLine,

LPSECURITY_ATTRIBUTES lpProcessAttributes,

LPSECURITY_ATTRIBUTES lpThreadAttributes,

BOOL bInheritHandles,

DWORD dwCreationFlags,

LPVOID lpEnvironment,

LPCTSTR lpCurrentDirectory,

LPSTARTUPINFO lpStartupInfo,

LPPROCESS_INFORMATION lpProcessInformation

);

其中:

lpApplicationName指向包含了要運行模塊名字的字符串。

lpCommandLine指向命令行字符串。

lpProcessAttributes描述進程的安全性屬性,NT下有用。

lpThreadAttributes描述進程初始線程(主線程)的安全性屬性,NT下有用。

bInHeritHandles表示子進程(被創建的進程)是否可以繼承父進程的句柄。可以繼承的句柄有線程句柄、有名或無名管道、互斥對象、事件、信號量、映像文件、普通文件和通訊端口等;還有一些句柄不能被繼承,如內存句柄、DLL實例句柄、GDI句柄、URER句柄等等。

子進程繼承的句柄由父進程通過命令行方式或者進程間通訊(IPC)方式由父進程傳遞給它。

dwCreationFlags表示創建進程的優先級類別和進程的類型。創建進程的類型分控制台進

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved