Advertisement
gr4viton

queue lock

Apr 3rd, 2015
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.02 KB | None | 0 0
  1. // main
  2. {
  3.     ..
  4.     motor1.ORDER_move()
  5.     ..
  6. }
  7.  
  8. class Motor()
  9. {
  10. ..
  11.     public void ORDER_move()
  12.     {
  13.             byte[] cmd = ...;
  14.             BackgroundWorker worker = new BackgroundWorker();
  15.             worker.DoWork += worker_DoWork;
  16.             worker.RunWorkerAsync((object)cmd);
  17.     }
  18.  
  19.         private void worker_DoWork(object sender, DoWorkEventArgs e)
  20.         {
  21.             lock(queue_lock)
  22.             {
  23.                 C_SPI.AppendDataToQueue(e.Argument as byte[]);
  24.             }
  25.             lock(spi_lock)
  26.             {
  27.                 C_SPI.WriteDataFromQueue();
  28.             }
  29.         }
  30. }
  31.  
  32. class C_SPI()
  33. {
  34.     // schematicky definice
  35.     private queue cmd_que;  // fifo fronta
  36.     private serialport spi;
  37.     object queue_lock;
  38.     object spi_lock;
  39.  
  40.  
  41.     public void AppendDataToQueue(byte[] cmd)
  42.     {
  43.                 lock (queue_lock)
  44.                 {
  45.             queue.append(cmd);
  46.         }
  47.     }
  48.     public void WriteDataFromQueue()
  49.     {
  50.                 lock (spi_locker)
  51.                 {
  52.             spi.write(queue.getLast);
  53.         }
  54.     }
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement