上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
新しい記事を書く事で広告が消せます。
スレッドをキックするメソッド()
{
Resume(スレッドの再開)
}
スレッド処理()
{
whileループ
{
if(条件式)
{
スレッド処理
} else {
Suspend(一時停止)
}
}
}
public class ThreadSmaple
{
private bool fsuspend = false;
private AutoResetEvent m_autoev;
private Thread m_thread;
/* コンストラクタ */
public ThreadSmaple()
{
/* 非シグナル状態でAutoResetEventオブジェクトを生成 */
this.m_autoev = new AutoResetEvent(false);
/* スレッドの生成と開始 */
this.m_thread = new Thread(new
ThreadStart(this.threadMe));
this.m_thread.Start();
}
/* 別スレッドで動作する関数 */
public void threadMe()
{
/* 無限ループ */
while(true)
{
if(fsuspend != true)
{
/*
*ここにスレッドで実行したい処理を記述します
*
*/
/* 処理が終わったら次回のループで
一時停止するようにフラグを立てます */
fsuspend = true;
} else {
/* AutoResetEventオブジェクトを
非シグナル状態にしてスレッドを停止させます */
this.m_autoev.WaitOne();
}
}
}
/* スレッドを再開させる関数 */
public void ReStartThread()
{
if (this.m_thread.ThreadState ==
System.Threading.ThreadState.WaitSleepJoin)
{
/* スレッド処理を実行するようにフラグを落とします */
fsuspend = false;
/* AutoResetEventオブジェクトをシグナル状態にして
スレッドを再開させます */
this.m_autoev.Set();
} else {
}
}
}