Aracılığıyla paylaş


IThreadProxy Yapısı

Yürütme iş parçacığı için soyutlama. Oluşturduğunuz zamanlayıcının SchedulerType ilke anahtarına bağlı olarak, Resource Manager size normal bir Win32 iş parçacığı veya kullanıcı modu zamanlanabilir (UMS) iş parçacığı tarafından yedeklenen bir iş parçacığı ara sunucusu verir. UMS iş parçacıkları, Windows 7 ve üzeri sürüme sahip 64 bit işletim sistemlerinde desteklenir.

Sözdizimi

struct IThreadProxy;

Üyeler

Genel Yöntemler

Veri Akışı Adı Açıklama
IThreadProxy::GetId İş parçacığı ara sunucusu için benzersiz bir tanımlayıcı döndürür.
IThreadProxy::SwitchOut Temel alınan sanal işlemci kökünden bağlamı kaldırır.
IThreadProxy::SwitchTo Şu anda yürütülen bağlamdan farklı bir bağlama işbirlikçi bağlam anahtarı gerçekleştirir.
IThreadProxy::YieldToSystem Çağıran iş parçacığının geçerli işlemcide çalıştırılacak başka bir iş parçacığına yürütme gerçekleştirmesine neden olur. İşletim sistemi yürütülecek sonraki iş parçacığını seçer.

Açıklamalar

İş parçacığı proxy'leri, iş gönderme aracı olarak arabirim IExecutionContext tarafından temsil edilen yürütme bağlamlarıyla birleştirilmiştir.

Devralma Hiyerarşisi

IThreadProxy

Gereksinimler

Üst bilgi: concrtrm.h

Ad alanı: eşzamanlılık

IThreadProxy::GetId Yöntemi

İş parçacığı ara sunucusu için benzersiz bir tanımlayıcı döndürür.

virtual unsigned int GetId() const = 0;

Dönüş Değeri

Benzersiz bir tamsayı tanımlayıcısı.

IThreadProxy::SwitchOut Yöntemi

Temel alınan sanal işlemci kökünden bağlamı kaldırır.

virtual void SwitchOut(SwitchingProxyState switchState = Blocking) = 0;

Parametreler

switchState
Anahtarı yürüten iş parçacığı ara sunucusunun durumunu gösterir. parametresi türündedir SwitchingProxyState.

Açıklamalar

Herhangi bir nedenle, bir bağlamın yürütülmekte olduğu sanal işlemci köküyle ilişkilendirmesini kaldırmanız gerekiyorsa kullanın SwitchOut . parametresine switchStategeçirdiğiniz değere ve sanal işlemci kökünde yürütülüyor olup olmadığına bağlı olarak, çağrı hemen döndürülür veya bağlamla ilişkili iş parçacığı ara sunucusunu engeller. parametresi olarak ayarlanmış Idleolarak çağrılma SwitchOut hatasıdır. Bunun yapılması invalid_argument özel durumla sonuçlanır.

SwitchOut , Resource Manager size bunu yapmanızı istediği için veya geçici bir fazla abonelikli sanal işlemci kökü istediğiniz için zamanlayıcınızın sahip olduğu sanal işlemci köklerinin sayısını azaltmak istediğinizde yararlıdır ve bu işlem tamamlanmıştır. Bu durumda, parametresi switchState olarak ayarlanmış Blockingbir çağrısı SwitchOut yapmadan önce sanal işlemci kökünde IVirtualProcessorRoot::Remove yöntemini çağırmanız gerekir. Bu işlem, iş parçacığı proxy'sini engeller ve zamanlayıcıda farklı bir sanal işlemci kökü yürütülmek üzere kullanılabilir olduğunda yürütmeye devam eder. Engelleyici iş parçacığı ara sunucusu, bu iş parçacığı ara sunucusunun yürütme bağlamı için işlev SwitchTo çağrılarak sürdürülebilir. Ayrıca, bir sanal işlemci kökünü etkinleştirmek için ilişkili bağlamını kullanarak iş parçacığı proxy'sini sürdürebilirsiniz. Bunun nasıl yapacağı hakkında daha fazla bilgi için bkz . IVirtualProcessorRoot::Activate.

SwitchOut ayrıca, gelecekte iş parçacığı ara sunucusunu engellerken veya üzerinde çalıştığı sanal işlemci kökünden geçici olarak ayırırken ve bunun için çalışma dağıttığı zamanlayıcıdan ayrılırken sanal işlemciyi yeniden etkinleştirmek istediğinizde de kullanılabilir. SwitchOut İş parçacığı ara sunucusunu engellemek istiyorsanız parametresini switchState olarak ayarlayınBlocking. Daha sonra yukarıda belirtildiği gibi veya IVirtualProcessorRoot::Activate kullanılarak SwitchTo sürdürülebilir. SwitchOut Bu iş parçacığı proxy'sini Nesting üzerinde çalıştığı sanal işlemci kökünden ve sanal işlemcinin ilişkilendirdiği zamanlayıcıdan geçici olarak ayırmak istediğinizde parametresi olarak ayarlayın. SwitchOut Sanal işlemci kökünde yürütülürken parametresinin switchState olarak ayarlanmasıNesting, kökün yeniden başlatılmasına ve geçerli iş parçacığı proxy'sinin bir taneye gerek kalmadan yürütülmeye devam etmesine neden olur. İş parçacığı ara sunucusu, ile IThreadProxy::SwitchOut yöntemini Blocking çağırana kadar zamanlayıcıyı daha sonraki bir noktada bırakmış olarak kabul edilir. parametresinin ayarlandığı Blocking ikinci çağrısıSwitchOut, bağlamı engellenen bir duruma döndürmek için tasarlanmıştır, böylece bu durum ya da SwitchTo IVirtualProcessorRoot::Activate ayırdığı zamanlayıcı tarafından sürdürülebilir. Sanal işlemci kökünde yürütülmediğinden, yeniden başlatma gerçekleşmez.

Yeniden başlatılmış sanal işlemci kökü, zamanlayıcınıza Resource Manager tarafından verilmiş olan yepyeni bir sanal işlemci kökünden farklı değildir. kullanarak IVirtualProcessorRoot::Activateyürütme bağlamı ile etkinleştirerek yürütme için kullanabilirsiniz.

SwitchOut şu anda yürütülen iş parçacığını IThreadProxy temsil eden arabirimde çağrılmalıdır veya sonuçlar tanımlanmamıştır.

Visual Studio 2010 ile birlikte gelen kitaplıklarda ve üst bilgilerde bu yöntem bir parametre almadı ve sanal işlemci kökünü yeniden başlatmadı. Eski davranışı korumak için varsayılan parametre değeri Blocking sağlanır.

IThreadProxy::SwitchTo Yöntemi

Şu anda yürütülen bağlamdan farklı bir bağlama işbirlikçi bağlam anahtarı gerçekleştirir.

virtual void SwitchTo(
    _Inout_ IExecutionContext* pContext,
    SwitchingProxyState switchState) = 0;

Parametreler

pContext
birlikte geçiş yapmak için yürütme bağlamı.

switchState
Anahtarı yürüten iş parçacığı ara sunucusunun durumunu gösterir. parametresi türündedir SwitchingProxyState.

Açıklamalar

İlk yürütme bağlamının IExecutionContext::D ispatch yönteminden bir yürütme bağlamından diğerine geçmek için bu yöntemi kullanın. yöntemi, yürütme bağlamını pContext bir iş parçacığı ara sunucusuyla ilişkilendirir. Geçerli iş parçacığı ara sunucusunun sahipliği, bağımsız değişken için switchState belirttiğiniz değere göre belirlenir.

Şu anda yürütülen iş parçacığı ara sunucusunu Resource Manager'a döndürmek istediğinizde değerini Idle kullanın. parametresi switchState ayarlı olarak Idle çağrılmasıSwitchTo, yürütme bağlamlarının pContext temel alınan yürütme kaynağında yürütülmeye başlamasına neden olur. Bu iş parçacığı proxy'sinin sahipliği Resource Manager'a aktarılır ve aktarımı tamamlamak için döndürmeden hemen sonra SwitchTo yürütme bağlamının Dispatch yönteminden dönmeniz beklenir. İş parçacığı ara sunucusunun dağıttığını yürütme bağlamı, iş parçacığı ara sunucusuyla ilişkilendirilmez ve zamanlayıcı bunu yeniden kullanabilir veya uygun gördüğü şekilde yok eder.

Bu iş parçacığı proxy'sinin engellenen bir duruma girmesini istediğinizde değerini Blocking kullanın. parametresi switchState ayarlı Blocking olarak çağrılması SwitchTo yürütme bağlamını pContext yürütmeye başlar ve devam edene kadar geçerli iş parçacığı ara sunucusunu engeller. zamanlayıcısı, iş parçacığı ara sunucusu durumundayken iş parçacığı proxy'sinin Blocking sahipliğini korur. Engelleyici iş parçacığı ara sunucusu, bu iş parçacığı ara sunucusunun yürütme bağlamı için işlev SwitchTo çağrılarak sürdürülebilir. Ayrıca, bir sanal işlemci kökünü etkinleştirmek için ilişkili bağlamını kullanarak iş parçacığı proxy'sini sürdürebilirsiniz. Bunun nasıl yapacağı hakkında daha fazla bilgi için bkz . IVirtualProcessorRoot::Activate.

Bu iş parçacığı proxy'sini üzerinde çalıştığı sanal işlemci kökünden ve işi dağıttığı zamanlayıcıdan geçici olarak ayırmak istediğinizde değerini Nesting kullanın. parametresi switchState ayarlı Nesting olarak çağrılması SwitchTo yürütme bağlamının pContext yürütülmeye başlamasına neden olur ve geçerli iş parçacığı ara sunucusu da sanal işlemci köküne gerek kalmadan yürütülmeye devam eder. İş parçacığı ara sunucusu, daha sonraki bir noktada IThreadProxy::SwitchOut yöntemini çağırana kadar zamanlayıcıdan ayrılmış olarak kabul edilir. yöntemi, IThreadProxy::SwitchOut bir sanal işlemci kökü yeniden zamanlayabilene kadar iş parçacığı ara sunucusunu engelleyebilir.

SwitchTo şu anda yürütülen iş parçacığını IThreadProxy temsil eden arabirimde çağrılmalıdır veya sonuçlar tanımlanmamıştır. parametresi pContext olarak ayarlanırsa NULLişlevi oluştururinvalid_argument.

IThreadProxy::YieldToSystem Yöntemi

Çağıran iş parçacığının geçerli işlemcide çalıştırılacak başka bir iş parçacığına yürütme gerçekleştirmesine neden olur. İşletim sistemi yürütülecek sonraki iş parçacığını seçer.

virtual void YieldToSystem() = 0;

Açıklamalar

Normal bir Windows iş parçacığı tarafından yedeklenen bir iş parçacığı ara sunucusu tarafından çağrıldığında, YieldToSystem tam olarak Windows işlevi SwitchToThreadgibi davranır. Ancak, kullanıcı modu zamanlanabilir (UMS) iş parçacıklarından çağrıldığında işlev, SwitchToThread çalıştırılacak sonraki iş parçacığını seçme görevini işletim sistemine değil kullanıcı modu zamanlayıcısına devreder. Sistemde farklı bir hazır iş parçacığına geçmenin istenen etkisini elde etmek için kullanın YieldToSystem.

YieldToSystem şu anda yürütülen iş parçacığını IThreadProxy temsil eden arabirimde çağrılmalıdır veya sonuçlar tanımlanmamıştır.

Ayrıca bkz.

Eşzamanlılık Ad Alanı
IExecutionContext Yapısı
IScheduler Yapısı
IVirtualProcessorRoot Yapısı