03-30-2016 07:26 AM - edited 03-30-2016 07:32 AM
Merhaba,
Bir butona bağlı event structure oluşturdum. Bu event structure içinde de bir while döngüsü çalışıyor ve 3 saniye sonra sonlanıyor.
İstediğim şu; bu döngü sonlanana kadar butona tekrar basıldığında başka bir event kuyruğa alınmasın ya da kuyruktakiler silinsin.
Event oluştururken "Limit maximum instances of this event in event queue" seçeneğini işaretleyip "1 instances" yaptığımda,
kuyruktaki eventlardan 1 tanesini çalıştırıp diğerlerini uçuruyor. O bir tane de çalışmasın istiyorum ancak 1'den küçük yapmama da izin vermiyor,
bu while döngüsü çalışırken başka hiçbir tetiklemeden etkilenmesin istiyorum bunu en pratik yoldan nası yapabilirim ?
03-30-2016 07:51 AM - edited 03-30-2016 07:58 AM
VI package manager vasıtasıyla AMC (Asyncronous Message Communication) kütüphanesini yükleyiniz. Kütüphanede örnek bir şablon (template) bulacaksınız. Mesaj işleme ile mesaj üretme ayrı döngülerde tanımlı olduğu için arayüz işlemlerini sıralamak (işleme almak)/sıradan çıkarmak ve çok daha karmaşık uygulamalar için oldukça kullanışlı bir kütüphanedir. Bu kütüphane ile istediğinizi rahatlıkla yapabilirsiniz.
Şablonla ilgili kısa bilgi aşağıdadır.
03-30-2016 08:14 AM
Merhabalar.
Set ve Unset busy vilarınıda deniyebilirsiniz. Zafer Beyin çözümü daha geçerli bir çözüm ancak bu da işinizi görebilir.
03-31-2016 02:08 AM
Merhaba,
Set Busy kullanırsanız Event esnasında kursor ile başka bir işlem yapamazsınız. Bunu "Edit Events" da "Lock panel until the event case completes."
seçeneğini işaretliyerek de yapmanız mümkün. Ancak paneli kilitlemek değil event kuyruğunu düzenlemek istiyorum.
Zafer bey kütüphaneyi yükledim, "0 instances" yapmaya neden engel olmuşlar anlayamadım ama bu kütüphaneyi öğrenmiş oldum.
Cevaplarınız için teşekkür ederim.
İyi çalışmalar
03-31-2016 03:04 AM - edited 03-31-2016 03:11 AM
"0 instances" ile kastınız nedir? Aşağıdaki mesaj işleyen döngü bir mesaj yoksa "timeout" koşulunda boşta bekleyecektir. Zaman aşımı (timeout) süresini mesela 1000ms yaparsanız nerdeyse hiç işlem yapmayacaktır. Kuyruktaki mesaj sayısını sınırlandırmak istiyorsanız alttaki döngünün girişinde oluşturduğumuz sıra (queue) eleman sayısını mesela 1 yapabilirsiniz (bunun yerine tüm mesajları alarak ayrıştırma/yönlendirme (parse/dispatch) yapmak daha uygun olacaktır). Ayrıca mesaj yollarken öncelik vererek mesajın kuyruğun önüne alınmasını sağlayabilirsiniz.
Kısacası bu yapıyı (mimariyi) kullanarak yapamayacağınız uygulama yoktur diyebilirim.