folder Tahribat.com Forumları
linefolder C#.Net, J#.Net, Vb.Net, Asp.Net
linefolder C# Thread'i Geçici Olarak Durdurmak Veya Bekletmek



C# Thread'i Geçici Olarak Durdurmak Veya Bekletmek

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    tuncaxxz
    tuncaxxz's avatar
    Kayıt Tarihi: 23/Ağustos/2005
    Erkek

    http://pastebin.com/nFLk2XS6

    Hocalarım thread yapılarıyla aynı anda 2 adet seri porttan veri almaya çalışıyorum. Aynı anda verileri alabiliyorum ekranda görebiliyorum. Sorunum bu veri alımını durdurup tekrar başlatabilmek.

    Bunu thread in içine koyduğum volatile bool olan _devam1 değişkeniyle while'in içine koydum. fakat sıkıntı burda _devam1'i false yapınca herşey çok güzel veri alımı durmuş gibi ekrana hiç bişey yazdırmıyor. ama _devam1'i tekrardan true yapınca daha önce aldığı herşeyi hiç durmamış gibi tekrar ekrana yazıyor.

    yani arkaplan thread while döngüsünün içine giriyor bir güzel çalışıyor ama ekrana yazdırmıyor. değişken i tekrar true yapınca hiç durmamış gibi arada gelen verilerin hepsini birden yazıyor. 

    Kodları pastebin'e attım. anlayamadım noldu ne bitti.


    punto cero
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    DrKill
    DrKill's avatar
    Kayıt Tarihi: 10/Mart/2004
    Erkek

    şu kodu şuraya yapıştırın aga. pastebin engelli.


    Bu imzayı her gördüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı sömürmektir
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    OttomanSlap
    OttomanSlap's avatar
    Kayıt Tarihi: 16/Mayıs/2012
    Erkek
    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.Linq;
    7. using System.Text;
    8. using System.Threading.Tasks;
    9. using System.Windows.Forms;
    10. using System.IO.Ports;
    11. using System.Threading;
    12. namespace WindowsFormsApplication1
    13. {
    14.     public partial class Form1 : Form
    15.     {
    16.  
    17.         volatile bool _devam1=false, _devam2=false,durum=true;
    18.         //
    19.        
    20.         public Form1()
    21.         {
    22.             InitializeComponent();
    23.  
    24.  
    25.             CheckForIllegalCrossThreadCalls = false;
    26.  
    27.             serialPort1.PortName = "COM3";
    28.             serialPort1.BaudRate = 9600;
    29.             serialPort1.DataBits = 8;
    30.  
    31.             serialPort2.PortName = "COM5";
    32.             serialPort2.BaudRate = 9600;
    33.             serialPort2.DataBits = 8;
    34.  
    35.            
    36.         }
    37.  
    38.         //
    39.         private void button1_Click(object sender, EventArgs e)
    40.         {
    41.  
    42.         }
    43.  
    44.  
    45.         //
    46.         private void button2_Click(object sender, EventArgs e)
    47.         {
    48.  
    49.             if (!serialPort1.IsOpen) { serialPort1.Open();  }
    50.                        
    51.             _devam1 = true;
    52.                        
    53.                         (new Thread(new ThreadStart(this.Read1))).Start();
    54.  
    55.            
    56.  
    57.             if (!serialPort2.IsOpen) { serialPort2.Open();  }
    58.                
    59.             _devam2 = true;
    60.  
    61.            (new Thread(new ThreadStart(this.Read2))).Start();
    62.        
    63.          }
    64.  
    65.  
    66.         //
    67.         public void Read1()
    68.         {  
    69.             while (_devam1)
    70.             {
    71.                 try
    72.                 {
    73.                     string message1 = serialPort1.ReadExisting();
    74.                     if (_devam1) { this.richTextBox1.Text += message1; }
    75.                 }
    76.                 catch (TimeoutException) { }
    77.             }
    78.         }
    79.  
    80.  
    81.         //
    82.         public void Read2()
    83.         {
    84.             while (_devam2)
    85.             {
    86.                 try
    87.                 {
    88.                     string message2 = serialPort2.ReadExisting();
    89.                     if (_devam2) { this.richTextBox2.Text += message2;}
    90.                }
    91.                catch (TimeoutException) { }
    92.             }
    93.         }
    94.  
    95.         private void button3_Click(object sender, EventArgs e)
    96.         {  
    97.               if(durum){
    98.                           _devam1 = true;
    99.                           _devam2 = true;
    100.                                 }    
    101.                        
    102.                                 if(!durum){
    103.                                 _devam1 = false;
    104.                                 _devam2 = false;    
    105.                                 }
    106.  
    107.             durum = !durum;
    108.         }
    109.         }
    110.  
    111.  
    112.  
    113.  
    114.  
    115.     }
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YeniHarman
    YeniHarman's avatar
    Kayıt Tarihi: 17/Haziran/2012
    Erkek

    Eee, seri porttaki bilgiler siz almayınca da duruyor. Sonraki çağırışta tamponunda kalan her şeyi veriyor.

    Yöntem 1: serialport nesnesini close metodunu çağırın.

    Yöntem 2: serialport nesnesinin DiscardInBuffer metodunu çağırın.


    Olaylara karışmayın!
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    crafty
    crafty's avatar
    Kayıt Tarihi: 19/Eylül/2006
    Erkek

    System.thread.threading.sleep(sure ms) kullanarak threadi uyku moduna alabilirsin


    Kasnak yuvarlandı elek oldu, eski orospular melek oldu...
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    TeRRoR
    TeRRoR's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Erkek

    Thread'i iptal etmek için cancellationtoken var hocam onada bakabilirsin.

    Ayrıca bu tür Thread işlemlerini .Net 4.5 ile gelen async keywordu ile daha kolay yapabilirsin.


    herkes programcı olmak zorunda değildir, lütfen bir zorunluluk gibi programlama dilleri öğrenmeye çalışmayın. yabancı dil filan öğrenin amq.// s.kimin etini yerim, kasaba minnet etmem.// ince düşünene kalın girer.//
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Tarikat Şeyhi
    HolyOne
    HolyOne's avatar
    Kayıt Tarihi: 01/Haziran/2002
    Erkek

    Yapacağın işi ayrı bi class olarak yapmanı, serial portu form yerine o classın içinde create etmeni tavsiye ederim.

    O şekilde daha kolay debug edersin


    Nush ile uslanmayanı etmeli tekdir, Tekdir ile uslanmayanın hakkı kötektir!
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    new Thread (... 

    diyerek zaten yeni bir thread oluşturuyorsun.. yerinde olsam bir dizi ya da listede tüm threadleri tutarım.. 

    sonra hangi threadi durduracaksam ya da bekleteceksem dizi/listeden çağırırım şöyle..

     

    List<Thread> threadList = new List<Thread<();

    ...

     

    threadList.Add(new Thread(new ThreadStart(this.Read1)));

    threadList[0].Start();

     

    threadList.Add(new Thread(new ThreadStart(this.Read2)));

    threadList[1].Start();

     

     

    ilk threadin işlemini iptal etmek için ise

    threadList[0].Abort(); diyebilirsin

     ya da bir şeyi bekleyecekse

    Join kullanabilirsin..

     

    Sleep metodunu kullanmak mantıklı değildir genel olarak. 

     

     

Toplam Hit: 1129 Toplam Mesaj: 8