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 switchState
geç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ış Idle
olarak ç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ış Blocking
bir ç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::Activate
yü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 NULL
iş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 SwitchToThread
gibi 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ı