最新の更新情報

2012年5月
« 4月    
 12345
6789101112
13141516171819
20212223242526
2728293031  

本ブログのURL

qrcode.png

お天気

 
このブログ「吟遊詩人の戯言」 の記事検索...

C#でのスレッド対応コードのサンプル


キーワード登録がありません.

関連記事

  • 登録がありません


 
 

なにかと,スレッドのサンプルコード,必要なんですわなぁ~
あちこち散らばったプロジェクトから,あ~でもないこ~でもないと,抜き出すのが,だんだん面倒になったんで
スケルトンを書いておきますです

勝手に持っていっちゃってくださいませぇ~~♥

なお,こやつ,インスタンスを作れば,スレッドが作成され
待機状態へ

Start()メソッドで,処理本体が起動しますです...

なお,このサンプルでは,2スレッド起動されます

C#:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Threading;
  5. using System.Windows.Forms;
  6.  
  7. namespace bMountLibrary
  8. {
  9.     public class ClassThreadSample
  10.     {
  11.         #region クラス
  12.         public class ThreadJobFixArg : EventArgs
  13.         {
  14.             private int  m_ThreadNo;
  15.             private int  m_FixCount;
  16.             public int ThreadNo { get { return m_ThreadNo;} set { m_ThreadNo = value;}}
  17.             public int FixCount { get { return m_FixCount;} set { m_FixCount = value;}}
  18.             public ThreadJobFixArg(int tmpNo, int tmpFixCount)
  19.             {
  20.                 m_ThreadNo = tmpNo;
  21.                 m_FixCount = tmpFixCount;
  22.             }
  23.         }
  24.  
  25.         public class ThreadLoopEndArg : EventArgs
  26.         {
  27.             private int  m_ThreadNo;
  28.             public int ThreadNo { get { return m_ThreadNo;}}
  29.             public ThreadLoopEndArg(int tmpNo){ m_ThreadNo = tmpNo;}
  30.         }
  31.         #endregion
  32.  
  33.         #region イベント
  34.         public delegate void OnThreadJobFix(object o, ThreadJobFixArg e);
  35.         public delegate void OnThreadLoopEnd(object o, ThreadLoopEndArg e);
  36.  
  37.         public event OnThreadJobFix    OnThreadJobFixEvent;   //スレッド処理中向けイベント
  38.         public event OnThreadLoopEnd            OnThreadLoopEndEvent;         //スレッドループアウト伝達向けイベント
  39.         #endregion
  40.  
  41.  
  42.         private bool m_ThreadOnFL;        //スレッドループを生かしている間はTrue
  43.         private bool m_ThreadJob1FL;            //スレッド処理を開始する場合はTrue
  44.         private bool m_ThreadJob2FL;
  45.  
  46.         private Thread m_Thread1;
  47.         private Thread m_Thread2;
  48.  
  49.  
  50.         //---------------------------------------------
  51.         //コンストラクタ
  52.         //
  53.         //---------------------------------------------
  54.         public ClassThreadSample()
  55.         {
  56.             OnThreadJobFixEvent = null;
  57.             OnThreadLoopEndEvent = null;
  58.  
  59.             m_Thread1 = new Thread(new ThreadStart(ThreadMethod1));
  60.             m_Thread2 = new Thread(new ThreadStart(ThreadMethod2));
  61.            
  62.             m_Thread1.Name = "サンプルスレッド_Loop1";
  63.             m_Thread2.Name = "サンプルスレッド_Loop2";
  64.  
  65.             m_Thread1.Start();
  66.             m_Thread2.Start();
  67.         }
  68.  
  69.         //---------------------------------------------
  70.         //リソースの開放
  71.         //
  72.         //---------------------------------------------
  73.         public void Dispose()
  74.         {
  75.             #region
  76.             m_ThreadOnFL = false;
  77.             for(int i = 0; i <200; i++)  //スレッドが死ぬまで最大200ミリ秒待たしてみる
  78.             {
  79.                 if ((m_Thread1 == null) && (m_Thread2 == null))
  80.                 {
  81.                     break;
  82.                 }
  83.  
  84.                 Application.DoEvents();
  85.                 Thread.Sleep(1);
  86.             }
  87.  
  88.             #endregion
  89.  
  90.         }
  91.         //---------------------------------------------
  92.         //スレッド処理の開始
  93.         //
  94.         //---------------------------------------------
  95.         public void Start()
  96.         {
  97.             #region
  98.             m_ThreadJob1FL = true;      //スレッド処理を開始するときはTrueにする
  99.             m_ThreadJob2FL = true;
  100.             #endregion
  101.         }
  102.  
  103.         //---------------------------------------------
  104.         //スレッドによるデータ再編成処理主処理(1)
  105.         //
  106.         //---------------------------------------------
  107.         private void ThreadMethod1()
  108.         {
  109.             #region
  110.             while (m_ThreadOnFL == true)
  111.             {
  112.                 if (m_ThreadJob1FL == false)        //フラグがfalse時は待機させる
  113.                 {
  114.                     Thread.Sleep(1);
  115.                     continue;
  116.                 }
  117.  
  118.                 //------------------------------------------
  119.                 //ここいらにお好きな処理を書いてくださいませ
  120.                 //------------------------------------------
  121.  
  122.                 m_ThreadJob1FL = false;   //処理が終わったら待機動作へもどすとか?
  123.  
  124.                 if (OnThreadJobFixEvent != null)        //1処理完了したら,イベントを飛ばしてみたり
  125.                 {
  126.                     OnThreadJobFixEvent(this, new ThreadJobFixArg(1, 0));
  127.                 }
  128.             }
  129.  
  130.             if (OnThreadLoopEndEvent != null)         //スレッドループを抜けたら,イベントを飛ばしてみたり
  131.             {
  132.                 OnThreadLoopEndEvent(this, new ThreadLoopEndArg(1));
  133.             }
  134.  
  135.             m_Thread1 = null;
  136.             #endregion
  137.         }
  138.  
  139.         //---------------------------------------------
  140.         //スレッドによるデータ再編成処理主処理(2)
  141.         //
  142.         //---------------------------------------------
  143.         private void ThreadMethod2()
  144.         {
  145.             #region
  146.             while (m_ThreadOnFL == true)
  147.             {
  148.                 if (m_ThreadJob2FL == false)
  149.                 {
  150.                     Thread.Sleep(1);
  151.                     continue;
  152.                 }
  153.  
  154.                 //------------------------------------------
  155.                 //ここいらにお好きな処理を書いてくださいませ
  156.                 //------------------------------------------
  157.  
  158.                 m_ThreadJob2FL = false;   //処理が終わったら待機動作へもどすとか?
  159.  
  160.                 if (OnThreadJobFixEvent != null)
  161.                 {
  162.                     OnThreadJobFixEvent(this, new ThreadJobFixArg(2, 0));
  163.                 }
  164.             }
  165.  
  166.             if (OnThreadLoopEndEvent != null)
  167.             {
  168.                 OnThreadLoopEndEvent(this, new ThreadLoopEndArg(2));
  169.             }
  170.  
  171.             m_Thread2 = null;
  172.             #endregion
  173.         }
  174.  
  175.  
  176.     }
  177. }

 
 
 
 

Leave a Reply

  

  

  

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt="">