freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

通過(guò)包裝非托管纖程_api_為_(kāi)net_實(shí)現(xiàn)代碼協(xié)同-全文預(yù)覽

  

【正文】 urn retval 語(yǔ)句。Yield 切換到調(diào)度當(dāng)前纖程的纖程,向其傳遞要輸出的值,如以下代碼中所示: __gc private struct StopFiber {}。 CorSwitchToFiber(fiber)。}CorSwitchToFiber 使用 ICorRuntimeHost::SwitchOutLogicalThreadState 方法在一個(gè)局部變量中保存線程狀態(tài),該方法存在于共享源 CLI 中(請(qǐng)記住,每個(gè)纖程都具有它自己的堆棧)。 corhostSwitchOutLogicalThreadState(amp。 在托管代碼中,用戶可以使用 Resume 和 Yield 方法在纖程之間切換。與 C 中不同的是,托管 C++ 使我可以捕獲不是派生自 Exception 類的異常。 } state = FiberStopped。然后,我切換回最后一次調(diào)度該纖程的纖程??梢酝ㄟ^(guò)本文的代碼下載獲得的示例應(yīng)用程序 演示了這一概念(參見(jiàn)位于本文頂部的鏈接)。未公開(kāi)的函數(shù) ICorRuntimeHost::CreateLogicalThread 告訴運(yùn)行庫(kù)設(shè)置托管線程(包括它自己的異常列表以及該纖程的 CLR 內(nèi)部的其他數(shù)據(jù))。構(gòu)造函數(shù)將指向 Fiber 對(duì)象的指針傳遞給非托管函數(shù)。 fiber = CreateFiber(0, unmanaged_fiberproc, objptr)。void initialize_corhost() { CorBindToCurrentRuntime(0, CLSID_CorRuntimeHost, IID_ICorRuntimeHost, (void**) amp。有關(guān) PAL 的詳細(xì)信息,請(qǐng)參閱 Rotor:Shared Source CLI Provides Source Code for a FreeBSD Implementation of .NET。 返回頁(yè)首實(shí)現(xiàn)詳細(xì)信息在我詳細(xì)解釋 Fiber 類的代碼之前,讓我們回顧一下纖程和 CLR 之間的交互。 }}Coroutine next = new CorIter()。}使用 Fiber 類和該 Coroutine 委托,現(xiàn)在可以將循環(huán)訪問(wèn)數(shù)組的代碼編寫為: class CorIter : Fiber { protected override void Run() { object[] array = new object[] {1, 2, 3, 4}。為了向該類中添加一些語(yǔ)法成分,我創(chuàng)建了一個(gè)名為 Coroutine 的委托,它包裝了 Fiber 對(duì)象的 Resume 方法。Fiber 構(gòu)造函數(shù)將執(zhí)行設(shè)置為從調(diào)用抽象方法 Run 的函數(shù)開(kāi)始。每個(gè)纖程都具有單獨(dú)的堆棧和寄存器組。當(dāng)該纖程切換到另一個(gè)纖程時(shí),它的執(zhí)行狀態(tài)將以類似的方式保存,以便它稍后可以繼續(xù)執(zhí)行。當(dāng)創(chuàng)建纖程時(shí),將向其傳遞一個(gè)纖程啟動(dòng)函數(shù)。我使用 C++ 的托管擴(kuò)展來(lái)進(jìn)行核心實(shí)現(xiàn),因?yàn)橥ㄟ^(guò)它可以容易地在托管代碼和非托管代碼之間進(jìn)行切換。代碼協(xié)同絕不應(yīng)該導(dǎo)致應(yīng)用程序中止,即使它生成了未被捕獲的異常。一旦我找到葉子不匹配的位置,我就可以中止這兩個(gè)代碼協(xié)同并且避免遍歷這兩棵樹(shù)的其余節(jié)點(diǎn)。Netscape () 中的 State Threads 庫(kù)用 C 并通過(guò) setjmp 和 longjmp 調(diào)用實(shí)現(xiàn)了代碼協(xié)同。這兩種選擇都為程序員帶來(lái)了負(fù)擔(dān)。當(dāng)該方法隨后被調(diào)用時(shí),將從它上次停止執(zhí)行的位置繼續(xù)執(zhí)行,遞增索引并輸出下一個(gè)元素。 true。}該代碼循環(huán)訪問(wèn)的數(shù)組以及該數(shù)組的當(dāng)前索引都是 Iter 類的字段。代碼協(xié)同下一次被調(diào)用時(shí),將從它上次停止執(zhí)行的位置繼續(xù)執(zhí)行,直到輸出另外一個(gè)值。.NET Framework 下面,當(dāng)前未以本機(jī)方式實(shí)現(xiàn)代碼協(xié)同。代碼協(xié)同是一個(gè)類似于纖程的、基于代碼的概念,它已經(jīng)在多個(gè)現(xiàn)代語(yǔ)言(如 CLU、Scheme、Python、Ruby 和 ICON)中實(shí)現(xiàn)。由于線程是寶貴資源,因此您有時(shí)不希望將整個(gè) OS 線程專門用于執(zhí)行簡(jiǎn)單的任務(wù)。本文說(shuō)明了如何通過(guò)使用纖程 API 和 C++ 的托管擴(kuò)展為 .NET Framework 實(shí)現(xiàn)代碼協(xié)同,以及如何容易地將它們與其他兼容 .NET 的語(yǔ)言一起使用。代碼協(xié)同可以節(jié)省處理器開(kāi)銷并減少冗余,因?yàn)橥ㄟ^(guò)它們可以中途停止過(guò)程的執(zhí)行,返回值,然后恰好從該過(guò)程停止執(zhí)行的位置繼續(xù)執(zhí)行。 中使用的輕量級(jí)線程處理對(duì)象 — 在很多方案中都很有用。此外,因?yàn)槭怯赡刂评w程,所以對(duì)于它們而言,通??梢愿菀椎馗櫷絾?wèn)題。在 Microsoft174。可以將代碼協(xié)同視為具有以下特點(diǎn)的方法:它們不返回到調(diào)用方,而是在處理中途停止執(zhí)行,并且向調(diào)用方輸出一個(gè)值。 int ndx。 for(int ndx = 0。該方法第一次被調(diào)用時(shí),索引為 0,并且函數(shù)輸出數(shù)組的第一個(gè)元素。您或者必須手動(dòng)移除遞歸并編寫一個(gè)與 C++ 標(biāo)準(zhǔn)模板庫(kù)中類似的迭代程序,或者需要在遇到每個(gè)節(jié)點(diǎn)時(shí)求助于使用回調(diào)。在 Streamlining DOM XML processing with Python,您可以看到代碼協(xié)同的類似用法 — 使用代碼協(xié)同處理 XML DOM。例如,為了了解兩棵樹(shù)是否按照相同順序
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1