1 Son düzenleyen, ugurlu2001 (14.07.2007 12:02:55)

Konu: Multi Threading Programlama...

Öncelikle herkese merhabalar;

İnternette VFP da Multi Threading programlama ile ilgili biraz araştırma yaptım. Bir kaç örnek uygulama gördüm ancak konuya tam hakim olamadım. Özellikle

http://blogs.msdn.com/calvin_hsia/archi … 07588.aspx
Örneğin ( PROCEDURE cmdCrawl.Click  kısmında hata veriyor. )


linkinde fena sayılmayacak bir örnek mevcut.

Ancak konu hakkında biraz detaylı bilgi bulabilirsem ve kullanılabilirliğinden emin olabilirsem yeni projemi VFP ile yazabileceğim. Konu hakkında kaynak neredeyse yok denicek kadar az. Aksi takdirde C# kaçınılmaz gibi. C# ta kod yazmaya çekiniyorum çünkü VFP 'da bir kaç ayda alabileceğim yolu C# 'ta sanırım bir kaç yılda ancak alabileceğim.  Ayrıca Projeyi sonuca bağlayabileceğimden de emin değilim.

Sevgili Üstad ve Ustalardan yorumlarını bekliyorum.

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

2 Son düzenleyen, cetinbasoz (14.07.2007 12:22:58)

Re: Multi Threading Programlama...

Ugur,
C#'da olsa, VFP'de olsa veya her ne ise, multithread programlama cok basit bir is degil. Cok basite indirgeyen kodlar var (verdigin Calvin'in linki ya da Codeplex'te http://www.codeplex.com/mtmyvfp gibi). Ya da VFP'nin IIS gibi multithread destekleyen bir ortamda kullandigi multithreaded DLL'leri gibi. Bunkara ek olarak bir suru sahte MultiThreading var (gercek Multithread degil ama sonuc oyle - yani ayni memory spacete calismasi gerekmiyor ise at ve unut tarzi isler).
Demem o ki, yapacagin is gercekten bir multithread'e ihtiyacin olup olmadigini belirliyor ve varsa hangi dili kullairsan kullan isler pek de kolay degil (C#'da bile ustalar surekli uyari koyuyorlar, kendini bir anda cikmaza sokmak, sistem kaynaklarini hizla tuketmek, threadlerin lock kalmasi vs vs:)

Multithread icin ilk sartin threadler arasi islerin gercekten bagimsiz olabilmesi. Mesela FTP'den birsey indirip onunla birsey yapmak. Bu ilk bakista multithreading gerektiyor ama degil. Bir timer ve file notification servis API ile oluyor. Veya hakikaten birden fazla tablonun kayitlarini dolasip bazi seyleri kontrol edecek hesap yapacak kodlar. Bir tanesi icin jenerik kod yazdigini dusun, ShellExecute ile N tanesini calsitirip, durmadan devam edersin (OS multithreading'ten faydalaniyor), sonuclar bitince haber alir toplarsin vs.

Uzun lafin kisasi multithreading diye dusunmeden once gercekten MT mi onu dusun.

Benim de yillar once yazdigim bir multithreading kod var biryerlerde, bulabilirsem gonderirim, yanlis hatirlamiyorsam threading kismi icin C#'ta birseyler yazip eklemistim ama emin degilim. Ihtiyacim olmadigindan unuttum neydi ve nerede.

www.eTechonologia.Net ve http://guineu.foxpert.com adreslerinde 2 farkli uctan VFP, .Net baglantilari gundemde. Onlar tamamlaninca ucretsiz olmasalar da, .Net'e gecmeden .Net kullanma sansin var (yalana bak, .Net bilmeden full destek olsa ne olur dedigini duyar gibiyim, haklisin aslinda ama SQL bilmeden .Net sanki isi yalniz basina goturebiliyormus gibi reklam yapildigina gore bu da olur:) .

Ha bu arada Sedna ve SednaX projeleri ne durumda ne getiriyor hic bakmadim. Onlardan da umulmadik harikalar cikabilir.

3

Re: Multi Threading Programlama...

Bir kaç saat sürebilecek bir hesaplama süresini (Belki 10-12 saat), 1/4 yada daha çok  kısaltma süresine çekebilmek için sanırım MultiThread gerekiyor. Ancak beceremeyecek gibi olursam, klasik ve procedural olan bildik sistemde devam edebilirim.

Çetin üstadım, yorumlarınız için çok teşekkür ediyorum. Her zaman söylediğim gibi; Allah aklınıza, parmaklarınıza ve sağlığınıza zeval vermesin smile

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

4

Re: Multi Threading Programlama...

Ugur,
O tip isler multiple CPU ile hiz kazanabilir ve hesap islerini 'alt modullere' dagitabilirsin. Bilmem ne kadar alakali ama bizde bilimsel modelleme hesaplarinda farkli yontemler uyguluyoruz (ve bircok dil). Kucuk bir exe'nin sadece kendisine verilen parcayla ilgilendigini dusun, bu exeden ard arda N tanesini calistirinca, CPU'lara isin dagilmasi nedeniyle hiz kazaniliyor. Cok kaba bir ornek:

* bagimsiz.prg
ltStart = datetime()
do while datetime() < m.ltStart + 60 && bir dakika oyalan
enddo

Sadece yukaridaki koddan exe yaptigini dusun. Bir dakika hicbirsey yapmadan oyalaniyor ve kapaniyor.

* Ana
declare long ShellExecute in "shell32.dll" ;
    long hwnd, string lpszOp, ;
    string lpszFile, string lpszParams, ;
    string lpszDir, long nShowCmd

* 5 tane calistirdik
ShellExecute(0,'Open',fullpath('bagimsiz.exe'),0,0,1)
ShellExecute(0,'Open',fullpath('bagimsiz.exe'),0,0,1)
ShellExecute(0,'Open',fullpath('bagimsiz.exe'),0,0,1)
ShellExecute(0,'Open',fullpath('bagimsiz.exe'),0,0,1)
ShellExecute(0,'Open',fullpath('bagimsiz.exe'),0,0,1)
MessageBox("Onlar calisiyor, benim isim bitti")

Ana programin mesajini gostermesi aninda (topu topu 5 satir gecip geliyor). Digerleri biribirilerinden bagimsiz 1 dakika duruyor:) Hepsinin kapanma zamani milisaniye farkiyla 1 dakika sonra. Tek makine de multithread, multiple user ornegi gibi bu. Gercekten hesap filan yapiyor olsalar gene bagimsiz olarak OS destegiyle multithread bir islem (threadler tamamen farkli).

O kodlar (Calvin,Claude ...) shellexecute kismini dogrudan ana'nin icine almak gibi. Almadan da eskiden beri yapilabilen seyler yani,m aralarinda mesajlasmalari icin bir tablo vs kullaninca cok da iyi oluyor (bir tabloya inserttrigger'dan yeni bir Shellexecute filan yaotigini da dusun - kardes benim isim tamam al sonuclari sen devam et gibisinden:).

5 Son düzenleyen, ugurlu2001 (14.07.2007 13:23:08)

Re: Multi Threading Programlama...

Üstad,

Bu bilgiler ve açıklamalar benim hiç akıl etmediğim ve sen söylemesen nasıl yapılabileceğini tahmin edemeyeceğim türde bilgiler.

Ancak bu türde bir açıklama sonucunda işimi kolayca parçalara bölüp hesaplatabileceğimi tahmin ediyorum.

Yeniden çok teşekkür ederim Üstad smile

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü