2009-10-7
=======================
《深入解析MFC》筆記 12. 進(jìn)程與線程
=======================
核心對象
核心對象 產(chǎn)生方法
event CreateEvent
mutex CreateMutex
semaphore CreateSemaphore
file CreateFile
file-mapping CreateFileMapping
process CreateProcess
thread CreateThread
進(jìn)程的生命周期: 《深入淺出MFC》P39
1、shell調(diào)用 CreateProcess 激活 App.exe
2、系統(tǒng)產(chǎn)生一個進(jìn)程核心對象,計數(shù)值為1.
3、系統(tǒng)在此進(jìn)程建立一個4GB地址空間。
4、加載器將必要的代碼加載到上述地址空間中,包括App.exe的程序、數(shù)據(jù),以及所需的動態(tài)鏈接函數(shù)庫(DLLs)。
5、系統(tǒng)為此進(jìn)程建立一個線程,成為主線程,現(xiàn)成才是CPU時間的分配對象。
6、系統(tǒng)調(diào)用 C runtime 函數(shù)庫的 Startup code。
7、startup code 調(diào)用 App程序的 WinMain函數(shù)。
8、App開始運(yùn)行。
9、使用者關(guān)閉App主窗口,是WinMain消息循環(huán)結(jié)束,WinMain結(jié)束
10、回到Startup code。
11、回到系統(tǒng),系統(tǒng)調(diào)用 ExitProcess結(jié)束進(jìn)程
產(chǎn)生子進(jìn)程:
CreateProcess(
LPCSTR lpApplicationName, //指定可執(zhí)行文件名
LPSTR lpCommandLine, //指定欲傳給新進(jìn)程的命令行參數(shù)
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles, //指定3、4的安全屬性是否需要被繼承
DWORD dwCreationFlags, //標(biāo)識組合
LPVOID lpEnvironment, //指定進(jìn)程所使用的環(huán)境變量區(qū),Null或父進(jìn)程環(huán)境變量
LPCSTR lpCurrentDirectory, //設(shè)定子進(jìn)程的工作目錄與工作驅(qū)動器,若為NULL,繼承父進(jìn)程
LPSTARTUPINFO lpStartupInfo, //指向一個 STARTUPINFO結(jié)構(gòu)的指針,
LPPROCESS_INFORMATION lpProcessInformation
);
線程的生命周期: 《深入淺出MFC》P41
調(diào)用CreateThread產(chǎn)生額外的線程時,系統(tǒng)完成以下工作
1、配置“線程對象”,其handle將成為 CreateThread 的返回值
2、設(shè)定計數(shù)器為 1.
3、配置線程 context。
4、保留線程的堆棧。
5、將 context 中的堆棧指針緩存器(SS)和指令指針緩存器(IP)設(shè)定妥當(dāng)。
CreateThread ( LPSECURITY_ATTRIBUTES lpThreadAttributes, //安全屬性的設(shè)定及繼承
DWORD dwStackSize, //堆棧大小
LPTHREAD_START_ROUTINE lpStartAddress, //設(shè)定“線程函數(shù)”的名稱
LPVOID lpParameter,
DWORD dwCreationFlags, //為0,則線程立即開始執(zhí)行。
LPDWORD lpThreadId //紡織線程的ID
);
unsigned long _beginthreadex ( 《深入淺出MFC》P42
void* security,
unsigned stack_size,
unsigned (__stdcall *start_address) (void *),
void *arglist,
unsigned initflag,
unsigned* thrdaddr
);
posted on 2010-03-15 23:29
Euan 閱讀(957)
評論(0) 編輯 收藏 引用 所屬分類:
windows