Threat içinden form nesnelerine ait eventlar oluşturmak

Başlatan bunalmis, 15 Nisan 2010, 20:29:20

hasangurlek

#30
Alıntı yapılan: bunalmis - 17 Nisan 2010, 00:37:55
Ancak formda bu mesajlari yakalayan procedure bir sebeple mesajlarin bazilarini kacirmasi durumunda ne olur? Bu mesajlar
FIFO tarzi bir bufferda depolaniyor ve islendikce azaliyormu?

Bu kismi tam anlayamadim.

Windows mesajları sadece bir defa gönderilir ve alıcıları bellidir. Siz bir mesajı almak için kayıt yaptırdıysanız o mesaj gelir sizi bulur. Siz bu mesajı yorumlayamazsanız bahsettiğiniz sebep ortaya çıkar. Eğerki windows mesaj zincirini bozacak ve sistemi kararsız çalışmaya itebilecek şekilde processler arası bir iletişim yönteminiz yoksa; kayıttır, mesajdır kavram kargaşası çıkmaması için buraya bakabilirsiniz : http://msdn.microsoft.com/en-us/library/ms997537.aspx
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

z

Bir karmasa var ama hala ortaya cikmadi.

Gorev yontetici %100 cpu kullanimindan bahsediyorsa benim yeni bir uygulama baslatamamam lazim degilmi?

Threadin icine koyun bir sonsuz dongu. Gorev yonetici CPU kullanimi %100 diyecek.

Simdi note pad acin, paint acin. Aciliyor. CPU %100 calisirken bunlari nasil aciyor?

Neyse bu kisimlar beni fazla ilgilendirmiyor.

Alıntı YapKodlarınızı sonsuz döngüler yerine olayları tetikleyecek şekilde veya bir olay olduğunda koşacak şekilde geliştirmelisiniz.

Windows yazilimlarinda asil mantigin bu oldugunu anladim. Ancak kullandigim cipin dll fonskyonlari veriler gittimi veri geldimi sorularina
ancak sorgu yoluyla cevap vermekte.

Yani dll"e sorarsan sana data geldi yada gelmedi diyor. Kendisi event uretmiyor.

Boyle bir yapida sonsuz dongu icinde dll"i surekli durtup ne oldu bizim is halloldumu demekten baska carem yok gorunuyor. Bu isi de
thread icinde yapiyorum.

Varmi bir onerin?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Alıntı YapWindows mesajları sadece bir defa gönderilir ve alıcıları bellidir. Siz bir mesajı almak için kayıt yaptırdıysanız o mesaj gelir sizi bulur. Siz bu mesajı yorumlayamazsanız bahsettiğiniz sebep ortaya çıkar.

Deneme amacli basit bir thread yazin.

Thread dongu icinde kalsin ve form procedurlerinden birisine surekli mesaj yollasin 1ms sleep ardindan tekrar dongunun basina gecsin.

Formda kendine gelen mesajlari ornegin memo1 e yazan procedurumuzun bir yerine 100ms lik sleep ekle.

Simdi ilk sorumu bir daha oku.

Kaynak ortama mesajlar atiyor. Bu mesajlar windows denetiminde  ilgili adreslere gonderiliyor. Ancak alicimiz sleep 100 ile hantallastigi icin
her gelen mesaji isleyemiyor.

Islenemeyen mesajlar ne oluyor? Cope mi gidiyor. Yoksa windowsun biryerini sisiriyormu?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

t2

Gönderme işini ayrı bir thread ile yaparsan sorun olmaz.
istersen alıcıda 1 dakikalık sleep olsun fark etmez. Sleep bitince  mesajı alır gereğini yapar. (denenmiştir)

z

Evet, gonderilen mesaj, isleme alinmadan ikinci mesaj yollanmamali sonuca vardim.

Bu da thread ile mesajin alici adresi arasinda ikinci bir haberlesme kanalinin acilarak aldim yenisini yolla turu haberlesmeyi
gerektiriyor. Aksi halde gonderilen mesajlarin cogu kayboluyor.

Ancak kaybolan mesajlarin hala bir tehlike olusturup olusturmadigini anlayamadim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

controller

#35
İşletim sistemi thread leri işlerken içindeki kodun ne olduğuna değil, öncelik seviyesine bakar. Yani sizin bir alt öncelik seviyesindeki thread içine while(1); yazmanız, bir üst öncelik seviyesindeki thread içindeki sleep(1000); in çalışmasına engel olmaz.

İşletim sistemlerinde "Idle mod" yani görev yöneticisinde gördüğümüz "Sistem boşta işlemi" en düşük öncelik seviyesine sahiptir. Yani o an işletilecek daha yüksek öncelik seviyeli bir iş yoksa idle modda kalır.

Bu linki daha önce birkaç kez verdim ama kimse açıp bakmıyor galiba.

http://msdn.microsoft.com/en-us/library/ms685100(v=VS.85).aspx

Şunuda ekleyeyim, öncelik seviyeleri aynı olsa dahi, bir işlem içinde while(1); yazmanız aynı öncelik seviyesindeki diğer işlemlerin çalışmasına engel olmaz. Çünkü "Round Robin" denilen teknik uygulanır.

http://en.wikipedia.org/wiki/Round-robin_scheduling

Hatta bütün işlemlerin en yüksek öncelik seviyesine sahip olmasıda, bir alt öncelik seviyesinde bulunan bir işlemin işletilmesine engel olmaz.
Hesabım OG tarafından haksız bir şekilde pasif yapılmıştır.

t2

İleti gönderilirken şu hatalar oluştu:

orhanc

Thread konusunda MSDN den epeyce faydalanabilirsin. Ayrıca SDK ları çekip incelemeni tavsiye ederim

http://msdn.microsoft.com/en-us/library/ms684841%28VS.85%29.aspx
i'm doing nothing... Giddy Up  http://www.drorhan.com