voile.thread
thread
モジュール
よく使用するスレッドのインターフェースを利用可能。
- LifeControlThread
- LoopThread
- Signal
Date:
December 08, 2008
Author:
P.Knowledge, SHOO
Lisence:
NYSL ( http://www.kmonos.net/nysl/ )
- class
LifeControlThread
: tango.core.Thread.Thread;
- 外部から殺すことのできるスレッド
外部では kill 関数を呼ぶことでスレッドを殺すことが可能。
内部では isAlive 関数を呼んだ場合に殺されたかどうかを検知する。
Example:
class X
{
private LifeControlThread m_LifeControlThread;
private void run()
{
while (isAlive)
{
Sleep(1000);
msgBox("!");
}
}
this()
{
m_LifeControlThread = new LifeControlThread(&run);
}
void start()
{
m_LifeControlThread.start;
}
void stop()
{
m_LifeControlThread.kill;
}
}
- this(void delegate() aDelegate, size_t sz = 0);
this(void function() aFunction, size_t sz = 0);
this(DelegateFunction!(void) aFunction, size_t sz = 0);
- コンストラクタ
See Also:
tango.core.Thread;
- bool
isAlive
();
- スレッドは生きている
- void
kill
();
- スレッドを殺す
- class
LoopThread
: voile.thread.LifeControlThread;
- ループスレッド
何回もおなじことを繰り返す際に使用すると便利。
Example:
class X2
{
private LoopThread m_LoopThread;
private void run()
{
Sleep(1000);
msgBox("!");
}
this()
{
m_LoopThread = new LoopThread(&run);
}
void start()
{
m_LoopThread.start();
}
void stop()
{
m_LoopThread.kill();
}
}
- this(void delegate() aDelegate, size_t sz = 0);
this(void function() aFunction, size_t sz = 0);
this(DelegateFunction!(void) aFunction, size_t sz = 0);
- コンストラクタ
See Also:
tango.core.Thread;
- class
Signaler
;
- シグナルの管理クラス
Windowsの CreateEvent や SetEvent のラッパー
Windows以外の環境でも動作するが、最適な実装ではないかもしれない。
Example:
Signaler[3] ev;
int data;
void run1()
{
data = 1;
ev[0].signal = true;
}
void run2()
{
data = 2;
ev[1].signal = true;
}
void run3()
{
data = 3;
ev[2].signal = true;
}
void main()
{
ev[] = [new Signaler, new Signaler, new Signaler];
scope t = new ThreadGroup;
data = 0;
t.create(&run1);
ev[0].wait;
assert(data == 1);
data = 0;
t.create(&run2);
ev[1].wait;
assert(data == 2);
data = 0;
t.create(&run3);
ev[2].wait;
assert(data == 3);
}
- void*
handle
();
- ハンドルを得る
ただしOS依存する処理をする場合にのみ使用すること
- this(HANDLE aHandle);
- コンストラクタ
Params:
- this(bool aFirstCondition = false);
- コンストラクタ
Params:
bool aFirstCondition |
初期状態 |
- bool
signal
();
- シグナル状態を返す
Returns:
trueならシグナル状態で、waitはすぐに制御を返す
falseなら非シグナル状態で、waitしたらシグナル状態になるか、時間が
過ぎるまで制御を返さない状態であることを示す。
- void
signal
(bool aCondition);
- シグナル状態を設定する
Params:
bool aCondition |
trueならシグナル状態にし、waitしているスレッドの制御を返す。
falseなら非シグナル状態で、waitしたらシグナル状態になるまで制御を
返さない状態にする。 |
- void
wait
();
- シグナル状態になるまで待つ
conditionがtrueならシグナル状態であり、すぐに制御が返る。
conditionがfalseなら非シグナル状態で、シグナル状態になるまで制御を
返さない。
- bool
wait
(double period);
- シグナル状態になるまで待つ
conditionがtrueならシグナル状態であり、すぐに制御が返る。
conditionがfalseなら非シグナル状態で、シグナル状態になるか、時間が
過ぎるまで制御を返さない。
|