Konuyu görüntüle
IUCODERS FORUM > Programlama > .NET > process class ? soru?
Yazar
akgulozkan


avatar
istanbul
Kayıt: 12.12.2006
18.08.2010-15:16 #70673
geliştirdiğim bir uygulama içerisinden başka bir uygulamayı otomatik olarak çağırmak için process sınıfını kullanıyorum. parametre gönderme ve alma işlemleri dışında bu uygulama ile kendi uygulamam arasında bir senkronizasyon yaratmam lazım. yani çağırdığım uygulama ile bir takım işler yapmak istiyorum. sonra da o uygulamayı belirli bir cevap alamama süresi sonrasında ya da işini bitiridiğinde kapatmak istyorum. sanırım process sınıfı ile çağırdığım uygulama ana thread den farklı bir thread üzerinde çalışıyor ve ana thread'i (yani benim uygulamamı) bekletmek dışında henüz bir çözüm üretemedim. Threadler yada processler arasında senkronizasyon yapmak için Thread.Sleep() dışında ne önerirsiniz?? hugs





Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
18.08.2010-17:49 #70678
Threadler arasında veri iletişimi için pipeline oluşturman lazım ama kullandığın platformda nasıl yapılır bilmiyorum.





Let`s make this world a better place to live !

Yazar
akgulozkan


avatar
istanbul
Kayıt: 12.12.2006
18.08.2010-17:55 #70679
clairvoyant yazdi
 
Threadler arasında veri iletişimi için pipeline oluşturman lazım ama kullandığın platformda nasıl yapılır bilmiyorum.


bi örnekle açıklar mısın dostum hugsangel





Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
18.08.2010-19:56 #70683
İki process (ya da thread) arasında okuma/yazma işlemi yapmak için bir pipe tanımlanır. Bunu bir dosyaya okuma/yazma işlemi gibi düşünebilirsin. Ana thread 'fgets' gibi bir metod ile pipe stream üzerinden child thread'ten bir veri bekleyebilir (klavyeden giriş bekleyen bir konsol uygulaması gibi). Child thread pipe akışına veri yazana kadar ana thread bekleme modundadır. Genellikle yazılan verinin sonuna CRLF eklenerek (Enter tuşuna basılmış gibi) yazma işleminin tamamlandığı akışa bildirilir. Ana thread ise CRLF gördüğünde okuma işleminin bittiğine karar verir ve kaldığı yerden işleme devam eder. Burada CRLF ayracı yerine kendi belirlediğin bir protokol de kullanabilirsin; bunun için ise 'fgets' gibi hazır bir fonksiyon yerine while içinde byte byte veri alan bir metod tanımlarsın. Fakat satır satır iletişim daha kolay olur bence.

Pipe mantığı aşağı yukarı bu şekilde (client-server mantığına benzer) ama kullandığın platformda nasıl uygulanır bilmiyorum. Bu kadar uğraşmanı gerektirmeyecek kadar pratik kütüphaneler de mevcut olabilir.





Let`s make this world a better place to live !

Yazar
tarikkranda


avatar

Kayıt: 07.01.2006
22.08.2010-02:25 #70713
Selam Özkan,

Process sınıfı eventlerini kullanabilirsin,
http://msdn.microsoft.com/en-us/library/system.diagnostics.process_events.aspx

Hata alınması ve çıkış durumlarını yakalayıp loglayabilirsin.





Yazar
orhan


avatar
istanbul
admin
Kayıt: 17.11.2005
22.08.2010-12:42 #70714
iki uygulama da sana ait ise messaging queue kullanarak iki uygulamanin birbiri ile konuşmasını sağlayabilrsin. yalnız bu 3. bir ek yazılımın makinaya kurulması ile olur.





N/A
Yazar
akgulozkan


avatar
istanbul
Kayıt: 12.12.2006
23.08.2010-08:51 #70717
tarikkranda yazdi
 
Selam Özkan,

Process sınıfı eventlerini kullanabilirsin,
http://msdn.microsoft.com/en-us/library/system.diagnostics.process_events.aspx

Hata alınması ve çıkış durumlarını yakalayıp loglayabilirsin.


teşk, hocam, burada 4 event var. Bunlardan exited event ı kullanabilirm fakat ne zaman exit olacağını da benim belirlemem lazım.. Kısaca olay şu, bir wpf app. (çok önceden sizin önerdiğiniz, hala aynı projebiggrin) var, bu uygulama başka bir uygulamayı çağırıyor, çağrılan ikinci uygulamaya istediğim parametreyi gönderip istediğim işlemi yapmasını sağlıyorum. Yapmak istediğim şey ise çağrılan uygulamanın işini bitirdiğini anlayıp, (belki bu anlamda outputDataRecieved event ı kullanılabilir) uygulamayı kapatmak. Yani uygulamayı ben kapatıcam fakat işinin bitip bitmediğini anlamam gerekiyor. Process class ile ilgili bir takım properities içerisinde var mı diye baktım denedim bulamadım.. Ayrıca ana thread i sleep ile bekletmek istemiyorum, zira program kilitlenmiş gibi oluyor. Ana process işine devam etsin , bu işler ise çağırdığım process in içinde bulunduğu thread tarafından yürütülsün. Sıkıntım bu, zira process yönetmi pek bilmiyorum ve thread'leri etkin kullanamıyorum... beat up hugs

orhan yazdi
 
iki uygulama da sana ait ise messaging queue kullanarak iki uygulamanin birbiri ile konuşmasını sağlayabilrsin. yalnız bu 3. bir ek yazılımın makinaya kurulması ile olur.


orhan admin çağırdığım uygulama bana ait değil.





Yazar
akgulozkan


avatar
istanbul
Kayıt: 12.12.2006
23.08.2010-08:57 #70718
clairvoyant yazdi
 
İki process (ya da thread) arasında okuma/yazma işlemi yapmak için bir pipe tanımlanır. Bunu bir dosyaya okuma/yazma işlemi gibi düşünebilirsin. Ana thread 'fgets' gibi bir metod ile pipe stream üzerinden child thread'ten bir veri bekleyebilir (klavyeden giriş bekleyen bir konsol uygulaması gibi). Child thread pipe akışına veri yazana kadar ana thread bekleme modundadır. Genellikle yazılan verinin sonuna CRLF eklenerek (Enter tuşuna basılmış gibi) yazma işleminin tamamlandığı akışa bildirilir. Ana thread ise CRLF gördüğünde okuma işleminin bittiğine karar verir ve kaldığı yerden işleme devam eder. Burada CRLF ayracı yerine kendi belirlediğin bir protokol de kullanabilirsin; bunun için ise 'fgets' gibi hazır bir fonksiyon yerine while içinde byte byte veri alan bir metod tanımlarsın. Fakat satır satır iletişim daha kolay olur bence.

Pipe mantığı aşağı yukarı bu şekilde (client-server mantığına benzer) ama kullandığın platformda nasıl uygulanır bilmiyorum. Bu kadar uğraşmanı gerektirmeyecek kadar pratik kütüphaneler de mevcut olabilir.


eyw dostum. Thread lerin genel işleyişi hakkında az çok bilgim var. Sorunum şu ki ana thread'in beklemesini istemiyorum. Zira bu bekleme süresini belirlemek pek rasyonel görünmüyor (pc den pc ye işlem süresi değişebiliyor) Ayrıca uygulamanın kısa bir süre de olsa cevap vermiyor modunda olmasını istemiyorum. Senin de bahsettiğin gibi sorun kullandığım platformda nasıl olur ve thread'ler arası iletişim nasıl yapılabilir. winkpeace





Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
23.08.2010-11:12 #70719
Söz konusu program işlem bittiğinde sonlanmıyor anlaşılan; peki işlem bittiğinde bir çıktı üretiyor mu? External bir programın belirli bir fonksiyonunun yapıp yapmadığını (özel bir yöntem belirtilmemişse) yalnızca onun çıkış birimlerinden öğrenebilirsin. Onu çağırdığın ana program sadece process durumunu falan bilebilir. External program işlem sonunda kendini sonlandırmıyorsa ya da state değiştirmiyorsa ana programın istediği işin bitip bitmediğini öğrenebileceğini sanmıyorum. Ama kullandığın programın da ne iş yaptığını bilmediğim için boş konuşuyor da olabilirim.

Sleep modunda bekletmek işini görüyorsa fakat programın beklemesini istemiyorsan şunu da deneyebilirsin; yazdığın programda kendi kodlarını çalıştıran child threadler oluşturabiliyorsan, söz konusu programı yönetmesi için bir thread tanımlayabilirsin. Alt program ile ilgili işleri oluşturduğun threade devredersin. Ana program yerine child thread sleep modunda beklemiş olur. İşlem bittiğinde child thread söz konusu programı terminate ettikten sonra kendini sonlandırır. Fakat burada yine ana programın işlem ile ilgili bilgilenmesini istiyorsan child thread ile iletişimini sağlaman gerekir.





Let`s make this world a better place to live !

Yazar
akgulozkan


avatar
istanbul
Kayıt: 12.12.2006
23.08.2010-12:00 #70720
clairvoyant yazdi
 
Söz konusu program işlem bittiğinde sonlanmıyor anlaşılan; peki işlem bittiğinde bir çıktı üretiyor mu? External bir programın belirli bir fonksiyonunun yapıp yapmadığını (özel bir yöntem belirtilmemişse) yalnızca onun çıkış birimlerinden öğrenebilirsin. Onu çağırdığın ana program sadece process durumunu falan bilebilir. External program işlem sonunda kendini sonlandırmıyorsa ya da state değiştirmiyorsa ana programın istediği işin bitip bitmediğini öğrenebileceğini sanmıyorum. Ama kullandığın programın da ne iş yaptığını bilmediğim için boş konuşuyor da olabilirim.

Sleep modunda bekletmek işini görüyorsa fakat programın beklemesini istemiyorsan şunu da deneyebilirsin; yazdığın programda kendi kodlarını çalıştıran child threadler oluşturabiliyorsan, söz konusu programı yönetmesi için bir thread tanımlayabilirsin. Alt program ile ilgili işleri oluşturduğun threade devredersin. Ana program yerine child thread sleep modunda beklemiş olur. İşlem bittiğinde child thread söz konusu programı terminate ettikten sonra kendini sonlandırır. Fakat burada yine ana programın işlem ile ilgili bilgilenmesini istiyorsan child thread ile iletişimini sağlaman gerekir.


dostum aslında senin yaklaşımın en doğrusu. Ama ben kendimce geçici bir çözüm ürettim. process.responding özelliği ile uygulamanın yanıt verip vermediğini kontrol ediyorum. Eğer uygulama iddle ise yani yanıt verebilir durumda boşta ise işini bitirmiştir diyip kapatıyorum. Almam gereken veri zaten dosya sisteminde tutulmuş oluyor. O veriyi de oradan alıyorum. Yani anlık çözüm diyelim blushing Bahsettiğiniz şeyleri inceledim de o yapıyı uygulamaya entegre etmek sanırım vaktimi alır.. şimdilik hepinize teşekkürler.. hugs





Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb