Zaman Uyumsuz Aracılar
Zaman uyumsuz aracı (veya yalnızca aracı), daha büyük bilgi işlem görevlerini çözmek için diğer aracılarla zaman uyumsuz olarak çalışan bir uygulama bileşenidir. Bir aracıyı, belirli bir yaşam döngüsüne sahip bir görev olarak düşünün. Örneğin, bir aracı bir giriş/çıkış cihazından (klavye, disk üzerindeki bir dosya veya ağ bağlantısı gibi) verileri okuyabilir ve başka bir aracı kullanılabilir duruma geldiğinde bu veriler üzerinde eylem gerçekleştirebilir. İlk aracı, ikinci aracıya daha fazla veri sağlandığını bildirmek için ileti geçirmeyi kullanır. Eşzamanlılık Çalışma Zamanı görev zamanlayıcı, aracıların daha az verimli önalım gerektirmeden işbirliği içinde engellemesini ve verimini sağlamasını sağlayan verimli bir mekanizma sağlar.
Aracılar Kitaplığı, zaman uyumsuz bir aracıyı temsil etmek için eşzamanlılık::agent sınıfını tanımlar. agent
, eşzamanlılık::agent::run sanal yöntemini bildiren bir soyut sınıftır. yöntemi aracı run
tarafından gerçekleştirilen görevi yürütür. run
soyut olduğundan, bu yöntemi öğesinden agent
türetdiğiniz her sınıfta uygulamanız gerekir.
Aracı Yaşam Döngüsü
Aracıların belirli bir yaşam döngüsü vardır. concurrency::agent_status numaralandırması bir aracının çeşitli durumlarını tanımlar. Aşağıdaki çizim, aracıların bir durumdan diğerine nasıl ilerlediğini gösteren bir durum diyagramıdır. Bu çizimde, düz çizgiler uygulamanızdan çağırdığınız yöntemleri temsil eder; noktalı çizgiler çalışma zamanından çağrılan yöntemleri temsil eder.
Aşağıdaki tabloda, numaralandırmadaki agent_status
her durum açıklanmaktadır.
Aracı Durumu | Açıklama |
---|---|
agent_created |
Aracı yürütme için zamanlanmamış. |
agent_runnable |
Çalışma zamanı aracıyı yürütme için zamanlar. |
agent_started |
Aracı başlatıldı ve çalışıyor. |
agent_done |
Aracı bitti. |
agent_canceled |
Aracı, duruma girmeden started önce iptal edildi. |
agent_created
bir aracının ilk durumudur ve agent_runnable
agent_started
etkin durumlardır ve agent_done
agent_canceled
terminal durumlarıdır.
Bir agent
nesnenin geçerli durumunu almak için concurrency::agent::status yöntemini kullanın. Yöntem eşzamanlılık açısından güvenli olsa status
da, aracının durumu yöntemin döndürdüğü zamana status
göre değişebilir. Örneğin, yöntemini çağırdığınızda status
bir aracı durumunda agent_started
olabilir, ancak yöntem döndürdüğünden agent_done
hemen sonra status
duruma taşınmış olabilir.
Yöntemler ve Özellikler
Aşağıdaki tabloda sınıfına ait bazı önemli yöntemler gösterilmektedir agent
. Tüm agent
sınıf yöntemleri hakkında daha fazla bilgi için bkz . aracı Sınıfı.
Metot | Açıklama |
---|---|
start | Yürütme için nesnesini zamanlar agent ve duruma ayarlar agent_runnable . |
Çalıştırın | Nesnesi tarafından gerçekleştirilecek görevi yürütür agent . |
yapılmış | Aracıyı agent_done duruma taşır. |
İptal | Aracı başlatılmadıysa, bu yöntem aracının yürütülmesini iptal eder ve duruma ayarlar agent_canceled . |
durum | Nesnenin geçerli durumunu agent alır. |
beklemek | nesnenin agent veya agent_canceled durumuna girmesini agent_done bekler. |
wait_for_all | Sağlanan agent tüm nesnelerin veya agent_canceled durumuna girmesini agent_done bekler. |
wait_for_one | Sağlanan agent nesnelerden en az birinin veya agent_canceled durumuna girmesini agent_done bekler. |
Aracı nesnesi oluşturduktan sonra concurrency::agent::start yöntemini çağırarak yürütme için zamanlayın. Çalışma zamanı aracıyı run
zamanladıktan ve duruma ayarladıktan agent_runnable
sonra yöntemini çağırır.
Çalışma zamanı, zaman uyumsuz aracılar tarafından oluşan özel durumları yönetmez. Özel durum işleme ve aracılar hakkında daha fazla bilgi için bkz . Özel Durum İşleme.
Örnek
Temel aracı tabanlı bir uygulamanın nasıl oluşturulacağını gösteren bir örnek için bkz . İzlenecek Yol: Aracı Tabanlı Uygulama Oluşturma.