folder Tahribat.com Forumları
linefolder C#, Asp.Net, .Net Core
linefolder C# Thread I Duraklatmak / Devam Ettirmek



C# Thread I Duraklatmak / Devam Ettirmek

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    risperdal
    risperdal's avatar
    Kayıt Tarihi: 13/Haziran/2006
    Erkek
    Merhabalar , c# express edition kullanıyorum. Malum vs kasıyor. Neyse gelelim sorumuza.

    Bir thread kullanıyorum . Thread da uzun bir döngüye sokuyorum. Yapılacak işlem biraz uzun sürdüğü için kullanıcıya da pause / resume

    gibi bir imkan tanımak istiyorum. thread.suspend(); ve thread.resume(); var ama bunlar deprecated  yani iptal edilmiş durumdalar. Onları kullanamıyorum. 

    nette biraz araştırdım işime yarıyacak birşey bulamadım. :/ nasıl yapabileceğimi bilen varmı

    Özgür iradeydi şeytanım.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    risperdal
    risperdal's avatar
    Kayıt Tarihi: 13/Haziran/2006
    Erkek

    aklıma gelmişken şöyle birşey denedim.

    dursammi=false diye bir değişken tanımladım bool cinsinden.

    thread ın işlettiği fonksiyonun içine döngünün başlangıcının hemen altına if(dursammi == false){ işlemler} diye yazdım. Pause butonuna da 

     private void button2_Click(object sender, EventArgs e)
      {
       
      if(dursammi == false)
      {
      dursammi=true;
      button2.Text = "Devam";

      }
      else // zaten bekliormşm
      {
      dursammi = false;
      button2.Text = "Duraklat";
      }

       
      }

    yaptım. Sonra threadı başlatınca duraklata basıyorum işlemler duruyor. Ama devam et butonuna basınca kaldığı yerden devam etmiyor 


    Özgür iradeydi şeytanım.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    voltigore
    voltigore's avatar
    Kayıt Tarihi: 01/Ağustos/2005
    Erkek

    Selam h4ckinger, şöyle bir şey yapabilirsin

    Thread ile çalışacak fonksiyonları bis class ta topla ve class ının içinde Run prosedürü olsun. (Threadi çalıştırmak için) (Mesela ThreadObject.cs diyelim)

    Ayrıca Run prosedürünün içinde sanırım döngün falan var, buradaki değişkenleri class ın başına public olarak tanımla ki müdahale edebilesin.

    Şimdi thread i çalıştırdığın yerde şöyle bir şey yapacaksın, emin değilim çalışırmı çalışmazmı;


    Thread th;
    public List threadList;

    void baslat_butonu()
    {
     if(this.threadList !=null && this.threadList.Count>0)
     {
      foreach(ThreadObject to in this.threadList)
      {
      ThreadObject refObj = to;
      th = new Thread(new ThreadObject(refObj.Run));
      refObj.thread = th;
      th.Start();
      }
     
      threadList.Clear();
     }
     else
     {
      ThreadObject = to = new ThreadObject(); 
      th = new Thread(new ThreadStart(to.Run)); // Burada emin değilim böyleydi sanırım, kafadan yazıyorum 
      to.i=0;
      to.site="http://www.mynet.com";
      to.thread = th;
      to.obj = this;
       
      th.Start();
     }
    }

    void duraklat_butonu()
    {
     lock(this.threadList)
     {
      foreach(ThreadObject to in this.theadList)
      {
      to.Durdur();
      }
     }
    }

    /////////////////////////
    // ThreadObject classi

    public int i;
    public Thread myThead;
    public string site;
    public object obj;
    public void Run()
    {
     //calıstırılacakkodlar
     //ornek dongu
     for(i=0;i<80;i++) // buradaki i yukarıdan gelmekte global
     {
      //Saldir(site);
     }
    }

    public void Durdur()
    {
     lock(this)
     {
      obj.threadList.Add(this);
      //Burada durduralım
      this.myThread.Abort();
     }
    }

     


    Geyik Candır :]
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    risperdal
    risperdal's avatar
    Kayıt Tarihi: 13/Haziran/2006
    Erkek
    volticim slm, başlat ve durdur butonlarım var ama istediğim şu bir duraklatma butonu olucak basınca duraklıyacak thread , sonra devam butonuna basınca kaldığı yerden devam edicek. Durdurma olayını thread.abort(); ile yapıyorum da duraklatmayı beceremedim : (

    Özgür iradeydi şeytanım.
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    voltigore
    voltigore's avatar
    Kayıt Tarihi: 01/Ağustos/2005
    Erkek
    h4ckingercım kodu düzenledim, thread başlatıyor ve duraklatıyor,

    Geyik Candır :]
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    risperdal
    risperdal's avatar
    Kayıt Tarihi: 13/Haziran/2006
    Erkek
    ento nerden çıktı şimdi :D

    akşam deniyecem şimdi çıkmam lazım , bide kodlara baktım da şöylece . Duraklattıktan sonra nasıl devam ettiricez :D

    Özgür iradeydi şeytanım.
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    voltigore
    voltigore's avatar
    Kayıt Tarihi: 01/Ağustos/2005
    Erkek
    sabah sabah thread kodu yazdırırsan böyle olur :) durdurduktan sonra başlata basarsan devam eder, eğer başlata durdurmadan basarsan başlar .d filozofik oldu

    Geyik Candır :]
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    risperdal
    risperdal's avatar
    Kayıt Tarihi: 13/Haziran/2006
    Erkek
    yav şimdi burda sen yine abort kullanmışsın o komple bitirmek için değil mi ?


    bide burdaki lock(this) ne işe yarar biraz açar mısın . Bu ara pis merak saldım c# :E

    public void Durdur()
    {
     lock(this)
     {
      //Burada durduralım
      this.myThread.Abort();
     }
    }

    Özgür iradeydi şeytanım.
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    voltigore
    voltigore's avatar
    Kayıt Tarihi: 01/Ağustos/2005
    Erkek
    şimdi orada abort ederek threadi tamamen öldürüyorum, ama thread in aktif değerleri hala duruyor, threadList in içinde, lock ise bir nesneye birden fazla thread in ulaşmasını engellemek için kullanılır

    Geyik Candır :]
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SharpShooter
    SharpShooter's avatar
    Banlanmış Üye
    Kayıt Tarihi: 10/Temmuz/2008
    Erkek

    neden o kadar kastınız anlamadım :)

    thread.abort() iptal eder geri dönüşü yok

    thread.suspend() pause eder

    thread.resume() kaldığı yerden devam ettirir

    tabi mesela şöyle bişi olabilir sen durdurmuşken(yani abort etmişken) resume dersen program patlayacaktır bunlarıda göz önünde bulundur.

    if'ler yardımıyla yaparsın

    not: umarım threadi global olarak tanıtıyorsundur :)


    - xx yerde hata var. - ya aslında kod şöyle sanıyor olabilir bla bla bla - olm kendine gel kodlar düşünmez - ...
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    voltigore
    voltigore's avatar
    Kayıt Tarihi: 01/Ağustos/2005
    Erkek
    fakat h4ckinger suspend ve resume a ulaşamadığını söylemiş, benim yaptığım farklı bir açıdan yaklaşmak 

    Geyik Candır :]
Toplam Hit: 6097 Toplam Mesaj: 14