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

正文內(nèi)容

通過包裝非托管纖程_api_為_net_實現(xiàn)代碼協(xié)同(文件)

2024-09-13 18:32 上一頁面

下一頁面
 

【正文】 witchToFiber(previousfiber)。如果 Run 只是返回而沒有輸出值,或者如果存在異常,則從 fibermain 中返回空值。因為我需要非托管纖程啟動過程獲得控制(以便它可以刪除為該纖程創(chuàng)建的 CLR 線程狀態(tài)),所以我實現(xiàn)了 IDisposable::Dispose 方法: void Dispose() { if(state == FiberRunning) { previousfiber = GetCurrentFiber()。}Dispose 首先檢查該纖程是否已經(jīng)運行至完成。由于該異常不是派生自 Exception 類,因此無法從 C 中捕獲它,結(jié)果它被傳播到調(diào)用 run 的 main 方法中。但是,使用異常(派生自 )來確保正確清理會給該類的使用施加一個小的限制。正像您將看到的那樣,編寫一個生成器以枚舉樹的葉子也很容易。即使第一對葉子不匹配,我也已經(jīng)引起了完全遍歷每棵樹以將其扁平化的處理開銷。下面的代碼(它使用了“訪問者”設(shè)計模式)說明了這一點: interface TreeVisitor { void Visit(Branch branch)。Branch 和 Leaf 類實現(xiàn)了 Tree 接口。 } public Tree left, right。}因為 C 不支持多個調(diào)度,所以我通過讓 Branch 和 Leaf 都重寫 Accept 方法來模擬它,并且調(diào)用了 TreeVisitor 的 Visit(Branch) 或 Visit(Leaf) 方法。如果左節(jié)點或右節(jié)點恰好是 Leaf,則它的值被輸出??梢栽谌缦滤镜恼Z句中使用該代碼協(xié)同作為生成器: foreach(Leaf leaf in tree) {}我還實現(xiàn)了 System::Collections::IEnumerator 接口: public Object Current { get { return curobj。該值被存儲在字段 curobj 中,并且在調(diào)用 Current 屬性時返回。如果我具有兩個輸出第一棵樹和第二棵樹的葉子的代碼協(xié)同(葉子生成器),則我連續(xù)調(diào)用每個代碼協(xié)同,然后檢查它們輸出的值。如果它們不相同,則我立即返回不成功的匹配,如下所示: static bool MatchFringe(Coroutine nexta, Coroutine nextb) { Object a = nexta()。 b == null) return true。}如果我發(fā)現(xiàn)這兩棵樹不匹配,則我可以通過調(diào)用 Dispose 方法中止這兩個纖程。面向 CLR 的編譯器還可以在內(nèi)部使用該實現(xiàn)作為提供代碼協(xié)同支持的語言的運行庫。我已經(jīng)發(fā)現(xiàn)的另外一個問題是,代碼協(xié)同切換可能在垃圾回收器線程內(nèi)部死鎖。我沒有實現(xiàn)調(diào)用 Dispose 的 Finalize 方法,因為 Dispose 切換到纖程以將其停止。您可以通過 ajai_shankar 與他聯(lián)系。如果您使用了這些技術(shù),則請自己承擔(dān)責(zé)任。如果纖程仍然在運行,則需要程序員負(fù)責(zé)在不再需要代碼協(xié)同時調(diào)用 Dispose。在將纖程與服務(wù)組件一起使用時,存在潛在的問題,并且纖程和 .NET 異常之間的交互可能非常復(fù)雜。返回頁首小結(jié)使用我已經(jīng)在本文中演示的纖程和代碼協(xié)同實現(xiàn),可以很容易地將事件驅(qū)動的應(yīng)用程序移植到更緊密地匹配基礎(chǔ) OS 的多線程模型,但是不會引起額外線程的相關(guān)開銷。 if((b)) return MatchFringe(nexta, nextb)。 if(a == null amp。如果一個代碼協(xié)同輸出空,而另一個代碼協(xié)同輸出 Leaf,則意味著第一棵樹已經(jīng)完全遍歷,而第二棵樹仍然具有待訪問的分支或葉子,因此這兩棵樹不匹配。因為 Fiber 類實現(xiàn)了可處置的接口,因此即使用戶退出枚舉,也會進行正確的清理。 return curobj != null。一旦遇到 Leaf,遞歸停止。對于分支,它遞歸訪問左子樹和右子樹;而對于葉子,它只輸出它的值,如圖 4 所示。 } public void Accept(TreeVisitor visitor) { (this)。 right = r。}interface Tree { void Accept(TreeVisitor visitor)。第二個代碼協(xié)同可以輸出第二棵樹的葉子。圖 3 兩棵樹要在不使用代碼協(xié)同的情況下了解邊緣是否匹配,我必須通過遍歷它們并將它們的葉子放在列表或數(shù)組中將這兩棵樹扁平化。返回頁首生成器和樹匹配示例既然已經(jīng)在 C++ 的托管擴展中完成了所有困難的工作,那么我就可以從其他語言中使用代碼協(xié)同的威力了。這樣,控制就干凈地返回到非托管纖程函數(shù),而該函數(shù)將刪除該纖程的 CLR 線程狀態(tài),并且切換回調(diào)用 Dispose 的纖程。因為該纖程運行得更早一些,所以它顯然已經(jīng)讓渡。 CorSwitchToFiber(fiber)。我在設(shè)計時注意的事項之一是,可以中止代碼協(xié)同并且丟棄它的剩余計算。}Yield 設(shè)置 retval 字段并切換到上一個纖程(該纖程在對 Resume 的調(diào)用中暫停),并準(zhǔn)備好執(zhí)行 ret
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1