亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mfc教程_ mfc的進程和線程.htm

?? MFC 詳細教程,是學習MFC不可多得的資料.
?? HTM
?? 第 1 頁 / 共 3 頁
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0041)http://www.vczx.com/tutorial/mfc/mfc8.php -->
<HTML><HEAD><TITLE>MFC教程_ MFC的進程和線程</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2800.1586" name=GENERATOR></HEAD>
<BODY bgColor=#ffffff>
<OL start=8>
  <P align=justify>
  <LI><A name=_Toc445889076></A><A name=_Toc445782479></A><A 
  name=_Toc452640940></A><A name=_Toc457299038></A><B>MFC的進程和線程</B> 
  <P></P>
  <OL>
    <P align=justify>
    <LI><B><A name=_Toc445889077></A><A name=_Toc445782480></A><A 
    name=_Toc452640941></A><A name=_Toc457299039></A>Win32的進程和線程概念</B> 
    <P></P></LI></OL></LI></OL>
<P 
align=justify>進程是一個可執行的程序,由私有虛擬地址空間、代碼、數據和其他操作系統資源(如進程創建的文件、管道、同步對象等)組成。一個應用程序可以有一個或多個進程,一個進程可以有一個或多個線程,其中一個是主線程。</P>
<P 
align=justify>線程是操作系統分時調度分配CPU時間的基本實體。一個線程可以執行程序的任意部分的代碼,即使這部分代碼被另一個線程并發地執行;一個進程的所有線程共享它的虛擬地址空間、全局變量和操作系統資源。</P>
<P align=justify>之所以有線程這個概念,是因為以線程而不是進程為調度對象效率更高:</P>
<UL>
  <P align=justify>
  <LI>由于創建新進程必須加載代碼,而線程要執行的代碼已經被映射到進程的地址空間,所以創建、執行線程的速度比進程更快。 
  <P></P>
  <P align=justify></P>
  <LI>一個進程的所有線程共享進程的地址空間和全局變量,所以簡化了線程之間的通訊。 
  <P></P></LI></UL>
<OL>
  <OL>
    <P align=justify>
    <LI><A name=_Toc445889078></A><A name=_Toc445782481></A><A 
    name=_Toc452640942></A><A name=_Toc457299040></A><B>Win32的進程處理簡介</B> 
    <P></P>
    <P align=justify>因為MFC沒有提供類處理進程,所以直接使用了Win32 API函數。</P>
    <OL>
      <P align=justify>
      <LI><A name=_Toc445889079></A><A name=_Toc445782482></A><A 
      name=_Toc452640943></A><A name=_Toc457299041></A><B>進程的創建</B> 
      <P></P>
      <P align=justify>調用CreateProcess函數創建新的進程,運行指定的程序。CreateProcess的原型如下:</P>
      <P align=justify>BOOL CreateProcess(</P>
      <P align=justify>LPCTSTR lpApplicationName,</P>
      <P align=justify>LPTSTR lpCommandLine,</P>
      <P align=justify>LPSECURITY_ATTRIBUTES lpProcessAttributes,</P>
      <P align=justify>LPSECURITY_ATTRIBUTES lpThreadAttributes,</P>
      <P align=justify>BOOL bInheritHandles,</P>
      <P align=justify>DWORD dwCreationFlags,</P>
      <P align=justify>LPVOID lpEnvironment,</P>
      <P align=justify>LPCTSTR lpCurrentDirectory,</P>
      <P align=justify>LPSTARTUPINFO lpStartupInfo,</P>
      <P align=justify>LPPROCESS_INFORMATION lpProcessInformation</P>
      <P align=justify>);</P>
      <P align=justify>其中:</P>
      <P align=justify>lpApplicationName指向包含了要運行模塊名字的字符串。</P>
      <P align=justify>lpCommandLine指向命令行字符串。</P>
      <P align=justify>lpProcessAttributes描述進程的安全性屬性,NT下有用。</P>
      <P align=justify>lpThreadAttributes描述進程初始線程(主線程)的安全性屬性,NT下有用。</P>
      <P 
      align=justify>bInHeritHandles表示子進程(被創建的進程)是否可以繼承父進程的句柄。可以繼承的句柄有線程句柄、有名或無名管道、互斥對象、事件、信號量、映像文件、普通文件和通訊端口等;還有一些句柄不能被繼承,如內存句柄、DLL實例句柄、GDI句柄、URER句柄等等。</P>
      <P align=justify>子進程繼承的句柄由父進程通過命令行方式或者進程間通訊(IPC)方式由父進程傳遞給它。</P>
      <P 
      align=justify>dwCreationFlags表示創建進程的優先級類別和進程的類型。創建進程的類型分控制臺進程、調試進程等;優先級類別用來控制進程的優先級別,分Idle、Normal、High、Real_time四個類別。</P>
      <P align=justify>lpEnviroment指向環境變量塊,環境變量可以被子進程繼承。</P>
      <P align=justify>lpCurrentDirectory指向表示當前目錄的字符串,當前目錄可以繼承。</P>
      <P align=justify>lpStartupInfo指向StartupInfo結構,控制進程的主窗口的出現方式。</P>
      <P 
      align=justify>lpProcessInformation指向PROCESS_INFORMATION結構,用來存儲返回的進程信息。</P>
      <P align=justify>從其參數可以看出創建一個新的進程需要指定什么信息。</P>
      <P 
      align=justify>從上面的解釋可以看出,一個進程包含了很多信息。若進程創建成功的話,返回一個進程信息結構類型的指針。進程信息結構如下:</P>
      <P align=justify>typedef struct _PROCESS_INFORMATION {</P>
      <P align=justify>HANDLE hProcess; </P>
      <P align=justify>HANDLE hThread; </P>
      <P align=justify>DWORD dwProcessId; </P>
      <P align=justify>DWORD dwThreadId; </P>
      <P align=justify>}PROCESS_INFORMATION; </P>
      <P align=justify>進程信息結構包括進程句柄,主線程句柄,進程ID,主線程ID。</P>
      <P align=justify></P>
      <LI><A name=_Toc445889080></A><A name=_Toc445782483></A><A 
      name=_Toc452640944></A><A name=_Toc457299042></A><B>進程的終止</B> 
      <P></P></LI></OL></LI></OL></OL>
<P align=justify>進程在以下情況下終止:</P>
<UL>
  <P align=justify>
  <LI>調用ExitProcess結束進程; 
  <P></P>
  <P align=justify></P>
  <LI>進程的主線程返回,隱含地調用ExitProcess導致進程結束; 
  <P></P>
  <P align=justify></P>
  <LI>進程的最后一個線程終止; 
  <P></P>
  <P align=justify></P>
  <LI>調用TerminateProcess終止進程。 
  <P></P>
  <P align=justify></P>
  <LI>當要結束一個GDI進程時,發送WM_QUIT消息給主窗口,當然也可以從它的任一線程調用ExitProcess。 
  <P></P></LI></UL>
<OL>
  <OL>
    <P align=justify>
    <LI><A name=_Toc445889081></A><A name=_Toc445782484></A><A 
    name=_Toc452640945></A><A name=_Toc457299043></A><B>Win32的線程</B> 
    <P></P>
    <OL>
      <P align=justify>
      <LI><B><A name=_Toc445889082></A><A name=_Toc445782485></A><A 
      name=_Toc452640946></A><A name=_Toc457299044></A>線程的創建</B> 
      <P></P></LI></OL></LI></OL></OL>
<P align=justify>使用CreateThread函數創建線程,CreateThread的原型如下:</P>
<P align=justify>HANDLE CreateThread(</P>
<P align=justify>LPSECURITY_ATTRIBUTES lpThreadAttributes,</P>
<P align=justify>DWORD dwStackSize,</P>
<P align=justify>LPTHREAD_START_ROUTINE lpStartAddress,</P>
<P align=justify>LPVOID lpParameter,</P>
<P align=justify>DWORD dwCreationFlags, // creation flags</P>
<P align=justify>LPDWORD lpThreadId</P>
<P align=justify>);</P>
<P align=justify>其中:</P>
<P align=justify>lpThreadAttributes表示創建線程的安全屬性,NT下有用。</P>
<P align=justify>dwStackSize指定線程棧的尺寸,如果為0則與進程主線程棧相同。</P>
<P align=justify>lpStartAddress指定線程開始運行的地址。</P>
<P align=justify>lpParameter表示傳遞給線程的32位的參數。</P>
<P 
align=justify>dwCreateFlages表示是否創建后掛起線程(取值CREATE_SUSPEND),掛起后調用ResumeThread繼續執行。</P>
<P align=justify>lpThreadId用來存放返回的線程ID。</P>
<P align=justify></P>
<UL>
  <P align=justify>
  <LI>線程的優先級別 
  <P></P></LI></UL>
<P 
align=justify>進程的每個優先級類包含了五個線程的優先級水平。在進程的優先級類確定之后,可以改變線程的優先級水平。用SetPriorityClass設置進程優先級類,用SetThreadPriority設置線程優先級水平。</P>
<P align=justify>Normal級的線程可以被除了Idle級以外的任意線程搶占。</P>
<OL>
  <OL>
    <OL>
      <P align=justify>
      <LI><A name=_Toc445889083></A><A name=_Toc445782486></A><A 
      name=_Toc452640947></A><A name=_Toc457299045></A><B>線程的終止</B> 
      <P></P></LI></OL></OL></OL>
<P align=justify>以下情況終止一個線程:</P>
<UL>
  <P align=justify>
  <LI>調用了ExitThread函數; 
  <P></P>
  <P align=justify></P>
  <LI>線程函數返回:主線程返回導致ExitProcess被調用,其他線程返回導致ExitThread被調用; 
  <P></P>
  <P align=justify></P>
  <LI>調用ExitProcess導致進程的所有線程終止; 
  <P></P>
  <P align=justify></P>
  <LI>調用TerminateThread終止一個線程; 
  <P></P>
  <P align=justify></P>
  <LI>調用TerminateProcess終止一個進程時,導致其所有線程的終止。 
  <P></P></LI></UL>
<P 
align=justify>當用TerminateProcess或者TerminateThread終止進程或線程時,DLL的入口函數DllMain不會被執行(如果有DLL的話)。</P>
<OL>
  <OL>
    <OL>
      <P align=justify>
      <LI><A name=_Toc445889084></A><A name=_Toc445782487></A><A 
      name=_Toc452640948></A><A name=_Toc457299046></A><B>線程局部存儲</B> 
      <P></P></LI></OL></OL></OL>
<P align=justify>如果希望每個線程都可以有線程局部(Thread 
local)的靜態存儲數據,可以使用TLS線程局部存儲技術。TLS為進程分配一個TLS索引,進程的每個線程通過這個索引存取自己的數據變量的拷貝。</P>
<P 
align=justify>TLS對DLL是非常有用的。當一個新的進程使用DLL時,在DLL入口函數DllMain中使用TlsAlloc分配TLS索引,TLS索引就作為進程私有的全局變量被保存;以后,當該進程的新的線程使用DLL時(Attahced 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费日本视频一区| 亚洲va天堂va国产va久| 欧美日产国产精品| 在线观看www91| 色噜噜狠狠成人网p站| 欧美在线看片a免费观看| 日本精品视频一区二区| 欧美亚洲禁片免费| 欧美日韩高清一区二区| 91精品国产欧美一区二区成人| 欧美美女直播网站| 7777精品伊人久久久大香线蕉最新版| 欧美日韩一级黄| 欧美大片顶级少妇| 亚洲国产精品精华液ab| 国产精品初高中害羞小美女文| 国产精品国产精品国产专区不片| 中文字幕一区二区三区蜜月 | 亚洲在线中文字幕| 日韩影院在线观看| 国产东北露脸精品视频| 99re免费视频精品全部| 欧美三级在线播放| 精品福利视频一区二区三区| 中文字幕av一区二区三区| 亚洲色图一区二区三区| 日韩福利电影在线观看| 国产成人av电影在线播放| 色综合久久中文字幕综合网| 欧美日韩极品在线观看一区| 精品国产乱码久久久久久免费| 久久精品日产第一区二区三区高清版| 亚洲桃色在线一区| 蜜臀99久久精品久久久久久软件| 国产精品自拍一区| 欧美视频精品在线观看| 久久影院午夜论| 亚洲尤物在线视频观看| 激情小说亚洲一区| 色噜噜偷拍精品综合在线| 欧美成人午夜电影| 亚洲影视在线播放| 国产精品99久久久久久似苏梦涵| 欧美中文字幕一区二区三区| 欧美精品一区二区三区视频| 亚洲综合网站在线观看| 国产乱妇无码大片在线观看| 精品福利av导航| 亚洲精品乱码久久久久久| 激情另类小说区图片区视频区| 91亚洲精品久久久蜜桃网站| 欧美一区二区三区白人| 有坂深雪av一区二区精品| 国产成人av一区二区三区在线| 在线观看日韩一区| 国产精品久久久久桃色tv| 激情图片小说一区| 91精品国产色综合久久不卡电影 | 欧美猛男gaygay网站| 国产精品国产自产拍在线| 九九精品一区二区| 日韩三级av在线播放| 亚洲国产综合色| 91片在线免费观看| 国产精品国产精品国产专区不片| 国产精品一线二线三线精华| 7777精品伊人久久久大香线蕉的| 亚洲一区二区三区美女| caoporn国产精品| 国产欧美1区2区3区| 国产一区二区在线视频| 久久婷婷久久一区二区三区| 蜜臀国产一区二区三区在线播放| 欧美日韩一区二区不卡| 亚洲第一搞黄网站| 欧美精品一级二级| 日韩在线观看一区二区| 欧美乱妇20p| 日日噜噜夜夜狠狠视频欧美人| 欧美精品成人一区二区三区四区| 天天做天天摸天天爽国产一区| 欧美亚洲愉拍一区二区| 天天影视网天天综合色在线播放| 欧美综合久久久| 婷婷综合另类小说色区| 日韩一区二区视频在线观看| 麻豆91免费观看| 欧美成人精精品一区二区频| 国产精品一区二区久久精品爱涩 | 一区二区欧美国产| 欧美性猛交xxxx乱大交退制版 | 欧美一区二区三区免费| 韩国v欧美v日本v亚洲v| 久久一二三国产| 99在线精品一区二区三区| 亚洲一区精品在线| 制服.丝袜.亚洲.另类.中文| 激情综合色综合久久综合| 国产色一区二区| 色综合色综合色综合色综合色综合| 艳妇臀荡乳欲伦亚洲一区| 欧美一区日韩一区| 国产成人精品综合在线观看| 亚洲欧美日韩成人高清在线一区| 欧美亚洲综合色| 久久激情五月婷婷| 亚洲视频在线一区二区| 51久久夜色精品国产麻豆| 国产东北露脸精品视频| 亚洲一区二区三区四区五区黄| 日韩一卡二卡三卡四卡| 成人综合在线视频| 亚洲超丰满肉感bbw| 久久综合色一综合色88| 一本大道综合伊人精品热热| 日韩精品电影在线观看| 国产亚洲一区二区三区四区| 在线看日本不卡| 国产乱国产乱300精品| 亚洲一区二区三区四区中文字幕| 久久一夜天堂av一区二区三区| 色伊人久久综合中文字幕| 激情综合一区二区三区| 午夜精品爽啪视频| 国产精品久久777777| 91精品国产色综合久久不卡蜜臀| www.欧美亚洲| 国产精品99久久久久久久vr | 亚洲精品一线二线三线无人区| 99热精品国产| 精品一区二区三区在线观看国产| 一区二区在线看| 久久蜜桃av一区二区天堂| 欧美丰满美乳xxx高潮www| 99久久精品99国产精品| 狠狠色丁香婷综合久久| 午夜精品福利久久久| 中文字幕在线观看一区二区| 精品国产一二三区| 69久久夜色精品国产69蝌蚪网| 一本一本大道香蕉久在线精品| 国产精品99久久久久久似苏梦涵| 蜜臀精品久久久久久蜜臀| 亚洲一区二区在线免费看| 亚洲精选免费视频| 最新成人av在线| 中文字幕免费观看一区| 欧美精品一区二区三区一线天视频 | 亚洲国产精品久久人人爱| 亚洲欧洲日产国产综合网| 国产精品美女久久久久久久网站| 国产片一区二区| 国产视频一区在线播放| 久久亚洲综合色一区二区三区| 日韩一区二区三区免费观看| 欧美一区二区三区四区视频| 日韩一区和二区| 日韩欧美高清一区| 久久久久久日产精品| 26uuu欧美| 国产精品麻豆99久久久久久| 国产精品高潮久久久久无| 亚洲欧洲日韩女同| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲综合色噜噜狠狠| 亚洲成人福利片| 麻豆精品新av中文字幕| 精品一区二区在线看| 国产精品一线二线三线精华| 成人动漫一区二区三区| 一本大道久久a久久精品综合| 在线观看www91| 日韩免费一区二区| 国产三级久久久| 亚洲免费成人av| 奇米色一区二区| 国产精品资源网站| 日本精品一区二区三区四区的功能| 欧美性色综合网| 精品国产免费人成电影在线观看四季 | 日韩理论电影院| 午夜视频在线观看一区二区 | 亚洲欧美成人一区二区三区| 一片黄亚洲嫩模| 精品影视av免费| 色先锋aa成人| 久久综合色天天久久综合图片| 亚洲欧美区自拍先锋| 日韩福利电影在线观看| av亚洲精华国产精华精华| 91麻豆精品国产自产在线| 欧美高清在线视频| 日韩国产欧美视频| 91在线精品一区二区| 欧美岛国在线观看| 亚洲国产精品天堂| 97se狠狠狠综合亚洲狠狠| 欧美一卡二卡三卡| 亚洲自拍偷拍综合| 91一区二区三区在线播放|