なにかと,スレッドのサンプルコード,必要なんですわなぁ~
あちこち散らばったプロジェクトから,あ~でもないこ~でもないと,抜き出すのが,だんだん面倒になったんで
スケルトンを書いておきますです
勝手に持っていっちゃってくださいませぇ~~♥
なお,こやつ,インスタンスを作れば,スレッドが作成され
待機状態へ
Start()メソッドで,処理本体が起動しますです...
なお,このサンプルでは,2スレッド起動されます
C#:
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Threading;
- using System.Windows.Forms;
- namespace bMountLibrary
- {
- public class ClassThreadSample
- {
- #region クラス
- public class ThreadJobFixArg : EventArgs
- {
- private int m_ThreadNo;
- private int m_FixCount;
- public int ThreadNo { get { return m_ThreadNo;} set { m_ThreadNo = value;}}
- public int FixCount { get { return m_FixCount;} set { m_FixCount = value;}}
- public ThreadJobFixArg(int tmpNo, int tmpFixCount)
- {
- m_ThreadNo = tmpNo;
- m_FixCount = tmpFixCount;
- }
- }
- public class ThreadLoopEndArg : EventArgs
- {
- private int m_ThreadNo;
- public int ThreadNo { get { return m_ThreadNo;}}
- public ThreadLoopEndArg(int tmpNo){ m_ThreadNo = tmpNo;}
- }
- #endregion
- #region イベント
- public delegate void OnThreadJobFix(object o, ThreadJobFixArg e);
- public delegate void OnThreadLoopEnd(object o, ThreadLoopEndArg e);
- public event OnThreadJobFix OnThreadJobFixEvent; //スレッド処理中向けイベント
- public event OnThreadLoopEnd OnThreadLoopEndEvent; //スレッドループアウト伝達向けイベント
- #endregion
- private bool m_ThreadOnFL; //スレッドループを生かしている間はTrue
- private bool m_ThreadJob1FL; //スレッド処理を開始する場合はTrue
- private bool m_ThreadJob2FL;
- private Thread m_Thread1;
- private Thread m_Thread2;
- //---------------------------------------------
- //コンストラクタ
- //
- //---------------------------------------------
- public ClassThreadSample()
- {
- OnThreadJobFixEvent = null;
- OnThreadLoopEndEvent = null;
- m_Thread1.Name = "サンプルスレッド_Loop1";
- m_Thread2.Name = "サンプルスレッド_Loop2";
- m_Thread1.Start();
- m_Thread2.Start();
- }
- //---------------------------------------------
- //リソースの開放
- //
- //---------------------------------------------
- public void Dispose()
- {
- #region
- m_ThreadOnFL = false;
- for(int i = 0; i <200; i++) //スレッドが死ぬまで最大200ミリ秒待たしてみる
- {
- if ((m_Thread1 == null) && (m_Thread2 == null))
- {
- break;
- }
- Application.DoEvents();
- Thread.Sleep(1);
- }
- #endregion
- }
- //---------------------------------------------
- //スレッド処理の開始
- //
- //---------------------------------------------
- public void Start()
- {
- #region
- m_ThreadJob1FL = true; //スレッド処理を開始するときはTrueにする
- m_ThreadJob2FL = true;
- #endregion
- }
- //---------------------------------------------
- //スレッドによるデータ再編成処理主処理(1)
- //
- //---------------------------------------------
- private void ThreadMethod1()
- {
- #region
- while (m_ThreadOnFL == true)
- {
- if (m_ThreadJob1FL == false) //フラグがfalse時は待機させる
- {
- Thread.Sleep(1);
- continue;
- }
- //------------------------------------------
- //ここいらにお好きな処理を書いてくださいませ
- //------------------------------------------
- m_ThreadJob1FL = false; //処理が終わったら待機動作へもどすとか?
- if (OnThreadJobFixEvent != null) //1処理完了したら,イベントを飛ばしてみたり
- {
- }
- }
- if (OnThreadLoopEndEvent != null) //スレッドループを抜けたら,イベントを飛ばしてみたり
- {
- }
- m_Thread1 = null;
- #endregion
- }
- //---------------------------------------------
- //スレッドによるデータ再編成処理主処理(2)
- //
- //---------------------------------------------
- private void ThreadMethod2()
- {
- #region
- while (m_ThreadOnFL == true)
- {
- if (m_ThreadJob2FL == false)
- {
- Thread.Sleep(1);
- continue;
- }
- //------------------------------------------
- //ここいらにお好きな処理を書いてくださいませ
- //------------------------------------------
- m_ThreadJob2FL = false; //処理が終わったら待機動作へもどすとか?
- if (OnThreadJobFixEvent != null)
- {
- }
- }
- if (OnThreadLoopEndEvent != null)
- {
- }
- m_Thread2 = null;
- #endregion
- }
- }
- }


