青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

C++ Programmer's Cookbook

{C++ 基礎} {C++ 高級} {C#界面,C++核心算法} {設計模式} {C#基礎}

windows核心編程--纖程

比線程更小的單位,好像用的不多的哦


纖程的操作

首先要注意的一個問題是,實現線程的是Wi n d o w s內核。操作系統清楚地知道線程的情況,并且根據M i c r o s o f t定義的算法對線程進行調度。纖程是以用戶方式代碼來實現的,內核并不知道纖程,并且它們是根據用戶定義的算法來調度的。由于你定義了纖程的調度算法,因此,就內核而言,纖程采用非搶占式調度方式。

需要了解的下一個問題是,單線程可以包含一個或多個纖程。就內核而言,線程是搶占調度的,是正在執(zhí)行的代碼。然而,線程每次執(zhí)行一個纖程的代碼—你決定究竟執(zhí)行哪個纖程(隨著我們講解的深入,這些概念將會越來越清楚)。

當使用纖程時,你必須執(zhí)行的第一步操作是將現有的線程轉換成一個纖程??梢酝ㄟ^調用C o n v e r t T h r e a d To F i b e r函數來執(zhí)行這項操作:

PVOID ConvertThreadToFiber(PVOID pvParam);
該函數為纖程的執(zhí)行環(huán)境分配相應的內存(約為2 0 0字節(jié))。該執(zhí)行環(huán)境由下列元素組成:

? 一個用戶定義的值,它被初始化為傳遞給C o n v e r t T h r e a d To F i b e r的p v P a r a m參數的值。?

? 結構化異常處理鏈的頭。?

? 纖程內存棧的最高和最低地址(當將線程轉換成纖程時,這也是線程的內存棧)。?

? CPU寄存器,包括堆棧指針、指令指針和其他。

當對纖程的執(zhí)行環(huán)境進行分配和初始化后,就可以將執(zhí)行環(huán)境的地址與線程關聯起來。該線程被轉換成一個纖程,而纖程則在該線程上運行。C o n v e r t T h r e a d To F i b e r函數實際上返回纖程的執(zhí)行環(huán)境的內存地址。雖然必須在晚些時候使用該地址,但是決不應該自己對該執(zhí)行環(huán)境數據進行讀寫操作,因為必要時纖程函數會為你對該結構的內容進行操作。現在,如果你的纖程(線程)返回或調用E x i t T h r e a d函數,那么纖程和線程都會終止運行。

除非打算創(chuàng)建更多的纖程以便在同一個線程上運行,否則沒有理由將線程轉換成纖程。若要創(chuàng)建另一個纖程,該線程(當前正在運行纖程的線程)可以調用C r e a t e F i b e r函數:

PVOID CreateFiber(
   DWORD dwStackSize,
   PFIBER_START_ROUTINE pfnStartAddress,
   PVOID pvParam);
C r e a t e F i b e r首先設法創(chuàng)建一個新內存棧,它的大小由d w S t a c k S i z e參數來指明。通常傳遞的參數是0,按照默認設置,它創(chuàng)建一個內存棧,其大小可以擴展為1 M B,不過開始時有兩個存儲器頁面用于該內存棧。如果設定一個非0值,那么就用設定的大小來保存和使用內存棧。

接著,C r e a t e F i b e r函數分配一個新的纖程執(zhí)行環(huán)境結構,并對它進行初始化。該用戶定義的值被設置為傳遞給C r e a t e F i b e r的p v P a r a m參數的值,新內存棧的最高和最低地址被保存,同時,纖程函數的內存地址(作為p f n S t a r t A d d r e s s參數來傳遞)也被保存。

P f n S t a r t A d d r e s s參數用于設定必須實現的纖程例程的地址,它必須采用下面的原型:

VOID WINAPI FiberFunc(PVOID pvParam);
當纖程被初次調度時,該函數就開始運行,并且將原先傳遞給C r e a t e F i b e r的p v P a r a m的值傳遞給它??梢栽谶@個纖程函數中執(zhí)行想執(zhí)行的任何操作。但是該函數的原型規(guī)定返回值是V O I D,這并不是因為返回值沒有任何意義,而是因為該函數根本不應該返回。如果纖程確實返回了,那么線程和該線程創(chuàng)建的所有纖程將立即被撤消。

與C o n v e r t T h r e a d To F i b e r函數一樣,C r e a t e F i b e r函數也返回纖程運行環(huán)境的內存地址。但是,與C o n v e r t T h r e a d To F i b e r不同的是,這個新纖程并不執(zhí)行,因為當前運行的纖程仍然在執(zhí)行。在單個線程上,每次只能運行一個纖程。若要使新纖程能夠運行,可以調用Switch To Fiber函數:

VOID SwitchToFiber(PVOID pvFiberExecutionContext);
Switch To Fiber 函數只有一個參數,即p v F i b e r E x e c u t i o n C o n t e x t,它是上次調用C o n v e r t T h r e a d To F i b e r或C r e a t e F i b e r函數時返回的纖程的執(zhí)行環(huán)境的內存地址。該內存地址告訴該函數要對哪個纖程進行調度。S w i t c h To F i b e r函數在內部執(zhí)行下列操作步驟:

1) 它負責將某些當前的C P U寄存器保存在當前運行的纖程執(zhí)行環(huán)境中,包括指令指針寄存器和堆棧指針寄存器。

2) 它將上一次保存在即將運行的纖程的執(zhí)行環(huán)境中的寄存器裝入C P U寄存器。這些寄存器包括堆棧指針寄存器。這樣,當線程繼續(xù)執(zhí)行時,就可以使用該纖程的內存棧。

3) 它將纖程的執(zhí)行環(huán)境與線程關聯起來,線程運行特定的纖程。

4) 它將線程的指令指針設置為已保存的指令指針。線程(纖程)從該纖程上次執(zhí)行的地方開始繼續(xù)執(zhí)行。

S w i t c h To F i b e r函數是纖程獲得C P U時間的唯一途徑。由于你的代碼必須在相應的時間顯式調用S w i t c h To F i b e r函數,因此你對纖程的調度可以實施全面的控制。記住,纖程的調度與線程調度毫不相干。纖程運行所依賴的線程始終都可以由操作系統終止其運行。當線程被調度時,當前選定的纖程開始運行,而其他纖程則不能運行,除非顯式調用S w i t c h To F i b e r函數。若要撤消纖程,可以調用D e l e t e F i b e r函數:

VOID DeleteFiber(PVOID pvFiberExecutionContext);
該函數用于刪除p v F i b e r E x e c u t i o n C o n t e x t參數指明的纖程,當然這是纖程的執(zhí)行環(huán)境的地址。該函數能夠釋放纖程棧使用的內存,然后撤消纖程的執(zhí)行環(huán)境。但是,如果傳遞了當前與線程相關聯的纖程地址,那么該函數就在內部調用E x i t T h r e a d函數,該線程及其創(chuàng)建的所有纖程全部被撤消。

D e l e t e F i b e r函數通常由一個纖程調用,以便刪除另一個纖程。已經刪除的纖程的內存棧將被撤消,纖程的執(zhí)行環(huán)境被釋放。注意,纖程與線程之間的差別在于,線程通常通過調用E x i t T h r e a d函數將自己撤消。實際上,用一個線程調用Te r m i n a t e T h r e a d函數來終止另一個線程的運行,是一種不好的方法。如果你確實調用了Te r m i n a t e T h r e a d函數,系統并不撤消已經終止運行的線程的內存棧??梢岳美w程的這種能力來刪除另一個纖程,后面介紹示例應用程序時將說明這是如何實現的。

為了使操作更加方便,還可以使用另外兩個纖程函數。一個線程每次可以執(zhí)行一個纖程,操作系統始終都知道當前哪個纖程與該線程相關聯。如果想要獲得當前運行的纖程的執(zhí)行環(huán)境的地址,可以調用G e t C u r r e n t F i b e r函數:

PVOID GetCurrentFiber();
另一個使用非常方便的函數是G e t F i b e r D a t a:

PVOID GetFiberData();
前面講過,每個纖程的執(zhí)行環(huán)境包含一個用戶定義的值。這個值使用作為C o n v e r t T h r e a dTo F i b e r或C r e a t e F i b e r的p v P a r a m參數而傳遞的值進行初始化。該值也可以作為纖程函數的參數來傳遞。G e t F i b e r D a t a只是查看當前執(zhí)行的纖程的執(zhí)行環(huán)境,并返回保存的值。

無論G e t C u r r e n t F i b e r還是G e t F i b e r D a t a,運行速度都很快,并且通常是作為內蘊函數(infrinsic funcfion)來實現的,這意味著編譯器能夠為這些函數生成內聯代碼。

posted on 2006-09-15 15:08 夢在天涯 閱讀(3842) 評論(0)  編輯 收藏 引用 所屬分類: Windows API

公告

EMail:itech001#126.com

導航

統計

  • 隨筆 - 461
  • 文章 - 4
  • 評論 - 746
  • 引用 - 0

常用鏈接

隨筆分類

隨筆檔案

收藏夾

Blogs

c#(csharp)

C++(cpp)

Enlish

Forums(bbs)

My self

Often go

Useful Webs

Xml/Uml/html

搜索

  •  

積分與排名

  • 積分 - 1816190
  • 排名 - 5

最新評論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              久久久久久久一区二区三区| 99国产精品久久久久老师| 在线一区二区视频| 久久精品国产一区二区电影| 国产一区二区主播在线 | 一区二区三区www| 欧美 日韩 国产精品免费观看| 亚洲电影下载| 欧美国产专区| 欧美成人第一页| 日韩一区二区免费高清| 亚洲精品免费电影| 欧美日韩系列| 亚洲一区中文字幕在线观看| 亚洲毛片一区二区| 国产精品夜夜夜一区二区三区尤| 一区二区三区日韩欧美| 日韩视频免费观看| 欧美日韩一区二区三区在线| 亚洲欧美精品伊人久久| 亚洲你懂的在线视频| 国产精品久久久久秋霞鲁丝 | 欧美精品1区| 日韩一级免费观看| 亚洲麻豆视频| 国产视频精品va久久久久久| 久久国产精品亚洲77777| 欧美中文在线观看| 亚洲电影一级黄| 这里是久久伊人| 国产自产精品| 亚洲娇小video精品| 欧美性天天影院| 欧美不卡一区| 国产精品成人免费视频| 性欧美8khd高清极品| 西西裸体人体做爰大胆久久久| 伊人久久久大香线蕉综合直播| 欧美aaa级| 国产精品国产三级国产aⅴ入口| 欧美一区二区日韩一区二区| 久久最新视频| 在线中文字幕一区| 久久久人成影片一区二区三区观看 | 免费久久99精品国产自在现线| 亚洲社区在线观看| 在线观看国产一区二区| 99精品热视频只有精品10| 国产在线成人| 日韩视频免费观看高清在线视频| 欧美女主播在线| 久久aⅴ国产欧美74aaa| 欧美激情91| 欧美成人久久| 国产一区二区激情| 亚洲精品久久久久久下一站 | 久久er精品视频| 99热在线精品观看| 久久久xxx| 午夜视频一区| 国产精品视频成人| 亚洲理伦电影| 最新热久久免费视频| 欧美韩日高清| 亚洲国产91色在线| 久久精品成人欧美大片古装| 一区二区免费在线播放| 久久夜色精品国产欧美乱| 久久人人97超碰精品888| 国产精品久久久久国产a级| 亚洲精品1区2区| 在线观看欧美日本| 美女黄毛**国产精品啪啪| 欧美在线视频日韩| 国产精品嫩草99a| 99精品国产在热久久婷婷| 亚洲日本成人网| 欧美二区在线观看| 亚洲福利视频在线| 亚洲精品一区久久久久久| 亚洲欧美视频在线观看| 久久精品国产亚洲高清剧情介绍| 国产精品家教| 一级日韩一区在线观看| 99精品视频免费观看视频| 欧美激情区在线播放| 亚洲欧洲日本mm| 一区二区欧美视频| 国产精品久久久999| 亚洲视频在线视频| 午夜亚洲视频| 国产日韩欧美制服另类| 欧美在线一级视频| 欧美chengren| 亚洲美女性视频| 欧美日韩一区视频| 午夜视频在线观看一区二区三区| 久久都是精品| 亚洲第一二三四五区| 久久人人爽人人爽| 夜夜嗨av一区二区三区四区| 亚洲免费在线电影| 国产亚洲人成a一在线v站| 久久久精品日韩| 亚洲欧美日韩精品久久| 亚洲欧美日韩国产精品| 欧美电影免费观看大全| 一区二区三区高清在线观看| 国产精品视频专区| 美女国产一区| 午夜精品视频在线观看一区二区 | 国产一区观看| 欧美成人按摩| 欧美在线国产| 99国产麻豆精品| 久久频这里精品99香蕉| 正在播放亚洲| 亚洲黄色毛片| 国产日韩欧美在线| 国产精品va在线播放| 久久人91精品久久久久久不卡| 中文一区在线| 亚洲国产精品久久久久| 久久久久国产精品人| 亚洲精品女av网站| 一区二区三区我不卡| 国产精品久久午夜| 欧美日韩中文字幕| 欧美激情按摩在线| 久久影院午夜论| 久久精品二区| 午夜久久99| 亚洲欧美精品中文字幕在线| 亚洲美女视频在线观看| 欧美黄在线观看| 欧美成人精品| 欧美 日韩 国产在线| 久久夜色精品亚洲噜噜国产mv| 亚洲欧美日韩综合| 亚洲尤物影院| 亚洲在线电影| 亚洲欧美在线一区| 亚洲欧美国产视频| 午夜精品久久久久久久99樱桃| 在线一区二区三区四区| 中文无字幕一区二区三区| 一区二区三区|亚洲午夜| 亚洲免费av观看| 亚洲免费观看在线视频| 亚洲最黄网站| 亚洲视频精选| 午夜精品一区二区三区在线播放| 亚洲一区在线看| 亚洲欧美在线视频观看| 欧美在线|欧美| 浪潮色综合久久天堂| 麻豆国产va免费精品高清在线| 理论片一区二区在线| 欧美大片免费观看| 亚洲精品乱码视频| 亚洲视频一区在线观看| 午夜久久资源| 麻豆视频一区二区| 欧美人成免费网站| 国产精品伦理| 激情综合五月天| 亚洲欧洲日韩在线| 亚洲欧美国产高清| 久久九九热免费视频| 亚洲电影在线| 亚洲一区亚洲| 麻豆成人在线| 国产精品欧美经典| 伊人天天综合| 亚洲永久网站| 蜜臀久久99精品久久久久久9 | 在线视频免费在线观看一区二区| 日韩亚洲国产欧美| 欧美中文字幕视频| 亚洲国产精品成人精品| 亚洲视频欧美视频| 久久久水蜜桃av免费网站| 欧美日韩日本网| 激情视频一区二区| 亚洲一区二区在线免费观看| 久久久国产精品一区| 亚洲免费福利视频| 久久久久久日产精品| 国产精品高潮在线| 亚洲国产免费| 久久精品中文字幕一区| 亚洲破处大片| 久久免费午夜影院| 国产精品乱人伦一区二区| 亚洲人成7777| 久久婷婷国产综合国色天香| 亚洲精品国产视频| 久热这里只精品99re8久| 国产精品美女黄网| 一区二区三区精密机械公司|