folder Tahribat.com Forumları
linefolder C#, Asp.Net, .Net Core
linefolder Birisi C#'La İlgili Sorularımı Cevaplayabilir Mi? [Multithreading]



Birisi C#'La İlgili Sorularımı Cevaplayabilir Mi? [Multithreading]

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Retro
    by_Tet
    by_Tet's avatar
    Kayıt Tarihi: 22/Mayıs/2012
    Erkek

    Şimdi hocalarım.

    En basit haliyle şunu yaptırtmak istiyorum.

     

    Bir class'ım olacak.

    Class'ıma get:set ile property ekliyorum bunlar güzel.

     

    Bir butonum var buna tıkladığımda şöyle birşey yaptırıyorum.

     

    Classim cl = new Classim();

    cl.ozellik = "bişiler";

    cl.blabla = "bişiler";

    cl.Baslat(); // işte burası önemli

     

    Class'ın kodlarında Baslat şu şekilde

    initial void Baslat()

    {

         WebBrowser wb = new WebBrowser();

    //wblerin tanımları falan filan.

         wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wb_DocumentCompleted);

    //burada tüm işlemler bittiğinde olacakları yaptırıyorum.

    }

     

    void wb_DocumentCompleted(blabla)

    {

    //burada işlemlerimi otomatik olarak yaptırıyorum. şöyle ki tıklattırıyorum bikaç yükleme olunca benim belirlediğim int atıyorum 3 olduğunda işlemi bitiriyorum. wb dispose() ediyorum. bikaç .dll komutuyla da session ve cookie sildiriyorum vs. işlem bitiyor.

    //sonra tekrar işleme başlatıyorum başlatmadan önce Thread.Sleep(1000) ile birgüzel bekletiyorum ki iyice dinlensin :D (bazen .dll ler gecikiyor bu yüzden bu bekleme işine de çare bulabilirsem iyi olur)

    // sonra tekrar Baslat(); ifadesiyle başlatıyorum.

    }

     

    Tüm bunlar güzel ama benim isteğim tek seferde bu işlemi 5-10 defa yaptırtmak. Sanıyorum multi threadingle alakalı. C#ta hala acemi ve tepeden düşme olduğumdan sıkıntı çekiyorum.

    Bunu en basit haliyle bana öğretebilecek var mı? interntteki kodları denedim hepsinde hata aldım.

    Aldığım hatalardan bazıları:

    activexli birşey diyor web browser tanımlamasında. STA.threading gibi bi kod var onu koyuyorum bu kez de işlem yapmıyor.

    Form1 ile threadler çakıyor gibi bir ifade çıkıyor.

    En çok aldığım 2 hata bunlar (tam detayları veremememin sebebi şuan onları silip çalışan projeyi yaptım. deneme şansım yok ama çok lazım olursa baştan hatalar yapabilirim :D tabi bu işi tam olarak güzel birşekilde anlatan çıkarsa daha çok makbul)

    Bir türlü kafam basmadı threadinge yapıyorum yapıyorum ama class a dökemiyorum. döksem hata veriyor vs. invoke olayları felan hiç kafam almadı. 


    iyibu! yeniden..
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Elif - Efe
    undefined-01
    undefined-01's avatar
    Kayıt Tarihi: 19/Aralık/2003
    Homo

    Classim cl = new Classim();

    classim arrayi olsun onun uzerinden ayni anda yapayim tarzinda ise dusuncen problem, cunku web browserlarin cookie'leri bir olacaktir.

    bunun icin webRequest ler ile bunu yapman gerekir. o zmn multitread de 

    Thread t =newThread(newParameterizedThreadStart(myParamObject));
    t.Start(myUrl);

    diyerek bir myParamOBject isimli fonksiona myUrl yi (sen burda classim'i yollarsin) OBJECT olarak alir.

     

    http://stackoverflow.com/a/1195918


    Bu aralar fazla yogunum. Unuttugum seyler oluyorsa affola. DM vs atın.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Tarikat Şeyhi
    HolyOne
    HolyOne's avatar
    Kayıt Tarihi: 01/Haziran/2002
    Erkek

    Hocam webbrowser formun threadinde çalıştığından o iki event de aynı threadde çalışıyor, yeni thread açmana gerek yok. Eğer yüklenmesini beklerken form kitleniyo diye yapiyosan

    1000ms delay etmek yerine

    while (wb.ReadyState != WebBrowserReadyState.Complete)
    {
        Application.DoEvents();
        label1.Text = wb.ReadyState.ToString();
    }

    Navigate ettikten sonra bu şekilde yüklenmesini bekleyebilirsn.

    Yanlız google reklam clickeri yaziyosun gibi geldi, google akıllıdır, birsürü parametre alıyor dikkat et random aralıklarla tıklatman yetmez bissürü sistem ayarını değiştirmen lazım, saat diliminden ekran çözünürlüğüne, renk derinliğinden browser adına kadar herşeyi değiştirmen lazım.


    Nush ile uslanmayanı etmeli tekdir, Tekdir ile uslanmayanın hakkı kötektir!
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Retro
    by_Tet
    by_Tet's avatar
    Kayıt Tarihi: 22/Mayıs/2012
    Erkek

    @Rakkoc hocam sağolasın başka şekilde hallettim lazım olana dursun :)

    HolyOne bunu yazdı

    Hocam webbrowser formun threadinde çalıştığından o iki event de aynı threadde çalışıyor, yeni thread açmana gerek yok. Eğer yüklenmesini beklerken form kitleniyo diye yapiyosan

    1000ms delay etmek yerine

    while (wb.ReadyState != WebBrowserReadyState.Complete)
    {
        Application.DoEvents();
        label1.Text = wb.ReadyState.ToString();
    }

    Navigate ettikten sonra bu şekilde yüklenmesini bekleyebilirsn.

    Yanlız google reklam clickeri yaziyosun gibi geldi, google akıllıdır, birsürü parametre alıyor dikkat et random aralıklarla tıklatman yetmez bissürü sistem ayarını değiştirmen lazım, saat diliminden ekran çözünürlüğüne, renk derinliğinden browser adına kadar herşeyi değiştirmen lazım.

    @HolyOne hocam ben webBrowser kadar sikik bişi görmedim cidden. Barış Yiğit ağbeyle konuştuk falan webClientle yapmama ikna etti. Ben de webClient ile cookieleri alıp sonraki işlemde header'e taktım sessionlar silinmemiş oldu. Google'la uğraşmıyorum da otomatik üyelik felan deneyleri yapıyorum. 

    Şimdi webclientle dakikada 8 üyelik (ortalama) yapabiliyorum. BackgroundWorker ile multi işleme dökmeyi planlıyorum hayırlısı bakalım :)

    Varsa multi işleme dökmek için önerin yapayım. Kaynak sıkıntım yok vdsde çalışıyorum. Dakikada bi 60 tane üyelik olması için çabalıcam :D (proxy falan da kullanıyorum. 15 temmuzdaki kayıt hala silinmemiş)

     


    iyibu! yeniden..
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Tarikat Şeyhi
    HolyOne
    HolyOne's avatar
    Kayıt Tarihi: 01/Haziran/2002
    Erkek

    Ha tamam ööle olur, google clicker fln yapacaksan webclient javascript çalıştırmiycağı için yemezdi ama işini görüyorsa tabiki webclient yapcan.

    Tek thread de olsa dakikada 8 üyelik çok az. ilk requestte çok bekletiyorsa webclientin proxy=null yapmayı unutma.

    Sen istediğini tek fonksiyon haline getir, tüm parametrelerini de tek bi classda topla, tek parametre alsın ondan sonra thread haline getirmesi kolay zaten.

    Ama detayına inince multithreading biraz zordur, bence c# daki threadler daha da zor çünkü birçok şeyi arkaplanda işlediğinden win32 application gibi hakim olamıyorsun.

    Ben şu yapıyı çok severim,

    http://www.codeproject.com/Articles/7933/Smart-Thread-Pool

    genelde bunu kullanıyorum fakat komplike bi thread applciation yapmıyorsan daha basit kodlarla da bitirebilirsin işi


    Nush ile uslanmayanı etmeli tekdir, Tekdir ile uslanmayanın hakkı kötektir!
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Retro
    by_Tet
    by_Tet's avatar
    Kayıt Tarihi: 22/Mayıs/2012
    Erkek
    HolyOne bunu yazdı

    Ha tamam ööle olur, google clicker fln yapacaksan webclient javascript çalıştırmiycağı için yemezdi ama işini görüyorsa tabiki webclient yapcan.

    Tek thread de olsa dakikada 8 üyelik çok az. ilk requestte çok bekletiyorsa webclientin proxy=null yapmayı unutma.

    Sen istediğini tek fonksiyon haline getir, tüm parametrelerini de tek bi classda topla, tek parametre alsın ondan sonra thread haline getirmesi kolay zaten.

    Ama detayına inince multithreading biraz zordur, bence c# daki threadler daha da zor çünkü birçok şeyi arkaplanda işlediğinden win32 application gibi hakim olamıyorsun.

    Ben şu yapıyı çok severim,

    http://www.codeproject.com/Articles/7933/Smart-Thread-Pool

    genelde bunu kullanıyorum fakat komplike bi thread applciation yapmıyorsan daha basit kodlarla da bitirebilirsin işi

    Komplike olmasın diye backgorundworker deniyordum hocam ama onda sıkıntıya girdim biraz hantal geldi bana bi de sessionları temizlemiyor.

    Buarada proxyleri null yapamam yeni proxy oluşturuyorum her seferinde ki patlamasın. Ayrıca öyle yapmazsam zaten güvenlik kodu filan sokar araya.

    Hızlandırmam lazım abü dediğin gibi. 8 çok az verdiğin link de harikaya benziyor da benim kafa okadar çalışmıyor şimdilik :D Class haline getiriyim dediğin gibi. Sonra burada tekrar yazarım. İnvoke olayını filan biraz daha anladım

     

    Mesela performclickte hata alırdım hep thread'ta şimdi şöyle hata almıyorum;

            private delegate void InvokeButtonTikla();

            private void ButtonTikla()

            {

                if (InvokeRequired)

                {

                    try { Invoke(new InvokeButtonTikla(ButtonTikla)); }

                    catch { }

                    return;

                }

                button1.PerformClick();

            }

    Bunun gibi bişeyler denicem bakalım


    iyibu! yeniden..
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YekteranBaymedir
    YekteranBaymedir's avatar
    Kayıt Tarihi: 10/Temmuz/2009
    Homo

    her ne yapıyorsan autoit ile daha kolay yapacağını belirteyim

  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Retro
    by_Tet
    by_Tet's avatar
    Kayıt Tarihi: 22/Mayıs/2012
    Erkek
    Daft bunu yazdı

    her ne yapıyorsan autoit ile daha kolay yapacağını belirteyim

    Webclientle ilgili örneği var mı hocam? Pek bişi anlamadım çünkü


    iyibu! yeniden..
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YekteranBaymedir
    YekteranBaymedir's avatar
    Kayıt Tarihi: 10/Temmuz/2009
    Homo
    by_Tet bunu yazdı
    Daft bunu yazdı

    her ne yapıyorsan autoit ile daha kolay yapacağını belirteyim

    Webclientle ilgili örneği var mı hocam? Pek bişi anlamadım çünkü

    ne yapmak istediğini burdan veya pm'den gönder kullanacağın komutları vereyim

    veya örneğini göstereyim

  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Retro
    by_Tet
    by_Tet's avatar
    Kayıt Tarihi: 22/Mayıs/2012
    Erkek
    Daft bunu yazdı
    by_Tet bunu yazdı
    Daft bunu yazdı

    her ne yapıyorsan autoit ile daha kolay yapacağını belirteyim

    Webclientle ilgili örneği var mı hocam? Pek bişi anlamadım çünkü

    ne yapmak istediğini burdan veya pm'den gönder kullanacağın komutları vereyim

    veya örneğini göstereyim

    http://www.iyibu.org/wc.php

    Buradaya webclient ile bağlanmayı. Bağlandıktan sonra ilk çıktıyı almayı sonra tekrar bağlanıp ikinci çıktıyı almayı. İlk çıktıdaki key ile ikinci çıktıdaki key aynı olacak. Bu işlem sürekli döngü içinde olacak aynı anda atıyorum 10 tane işlem yapılacak.

    Bunu istiyorum hocam. Şuan c#la hepsini yaptım bitek aynı anda 10 tane işlem yaptırtmak kaldı. Hangisi basit gelirse ona kaçıyım multi threading illet


    iyibu! yeniden..
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YekteranBaymedir
    YekteranBaymedir's avatar
    Kayıt Tarihi: 10/Temmuz/2009
    Homo

    olayı anlamadım.

    bikaç kere browserdan verdiğin linke baktım.

    ilk çıktı da dsdsadas -> xxxxxx gibi bir şey yazdı

    sonra hep sabit merhaba -> xxxxxxx yazdı

Toplam Hit: 2149 Toplam Mesaj: 19