TNB Library
クラス | 公開メンバ関数 | 静的公開メンバ関数 | 限定公開変数類 | 全メンバ一覧
CThread クラス

スレッド管理クラス [詳解]

#include <TnbThread.h>

+ CThread の継承関係図

クラス

struct  IRunner
 スレッド実行管理ランナーインターフェース [詳解]
 

公開メンバ関数

 CThread (void)
 コンストラクタ [詳解]
 
HANDLE GetHandle (void) const
 [取得] スレッドのハンドル取得 [詳解]
 
DWORD GetId (void) const
 [取得] スレッドのID取得 [詳解]
 
int GetPriority (void) const
 [取得] 優先度取得 [詳解]
 
DWORD GetThreadResult (void) const
 [取得] スレッド終了値 [詳解]
 
bool IsAlive (void) const
 [確認] スレッドが生きているか [詳解]
 
 operator HANDLE (void) const
 [取得] スレッドのハンドル取得 [詳解]
 
bool PostMessage (UINT message, WPARAM wParam=0, LPARAM lParam=0) const
 [実行] PostThreadメッセージ [詳解]
 
bool Resume (void)
 [実行] レジューム. [詳解]
 
DWORD_PTR SetAffinityMask (DWORD_PTR affinityMask)
 [設定] プロセッサアフィニティマスク設定. [詳解]
 
void SetOwnerHwnd (HWND hOwner)
 [設定] 関連ウィンドウハンドル設定. [詳解]
 
bool SetPriority (int priority=THREAD_PRIORITY_NORMAL)
 [設定] 優先度設定 [詳解]
 
bool SetRunner (IRunner *pRunner)
 [設定] ランナー、設定 [詳解]
 
bool Start (LPCTSTR lpszName=NULL)
 [設定] スレッド開始 [詳解]
 
bool Stop (DWORD dwWait=15000)
 [設定] スレッド停止 スレッドに対して停止要求します。 [詳解]
 
void StopRequest (void)
 [設定] スレッド停止要求. [詳解]
 
void Suspend (void)
 [実行] サスペンド. [詳解]
 
bool Terminate (DWORD result=0)
 [設定] スレッド中断 [詳解]
 
virtual ~CThread (void)
 デストラクタ [詳解]
 

静的公開メンバ関数

static void PumpMessage (HWND hWnd)
 [処理] メッセージポンプ. [詳解]
 

限定公開変数類

HWND m_hOwnerWnd
 オーナーウィンドウ [詳解]
 
HANDLE m_hThread
 スレッドのハンドル [詳解]
 
DWORD m_threadId
 スレッドのID [詳解]
 

詳解

スレッド管理クラス

IRunner を一つ管理し、スレッドで動かします。
使用例
class CMyThread : public CThread::IRunner
{
public:
void Start(void)
{
m_thread.SetRunner(this);
m_thread.Start();
}
protected:
virtual DWORD Run(void)
{
while ( IsRunnable() )
{
; //スレッドでの処理
}
return 0;
};
CThread m_thread;
};
bool Start(LPCTSTR lpszName=NULL)
[設定] スレッド開始
Definition: TnbThread.h:618
CThread(void)
コンストラクタ
Definition: TnbThread.h:400
必要ファイル
TnbThread.h
日付
06/04/01 新規作成
06/04/21 Thread起動待ちに CCyclicBarrier を使うように変更
06/08/03 スレッド作成に _beginthread を使用するようにした。
06/09/08 Stop時、既にスレッドがない場合も考慮。
06/09/19 同期に Exchanger を使うようにした。
09/09/10 CThreadStatus 部分を分離。 Resume(), Suspend() 追加。
10/01/12 Terminate() 追加。
19/06/10 Terminate() 修正。ハンドルをNULLにし忘れていた。

TnbThread.h315 行目に定義があります。

構築子と解体子

◆ CThread()

CThread ( void  )

コンストラクタ

TnbThread.h400 行目に定義があります。

◆ ~CThread()

virtual ~CThread ( void  )
virtual

デストラクタ

覚え書き
スレッドが生きている場合、停止させます。

TnbThread.h408 行目に定義があります。

関数詳解

◆ GetHandle()

HANDLE GetHandle ( void  ) const
inherited

[取得] スレッドのハンドル取得

戻り値
ハンドル

TnbThread.h154 行目に定義があります。

◆ GetId()

DWORD GetId ( void  ) const
inherited

[取得] スレッドのID取得

戻り値
ID

TnbThread.h163 行目に定義があります。

◆ GetPriority()

int GetPriority ( void  ) const
inherited

[取得] 優先度取得

覚え書き
設定していない場合、優先度は THREAD_PRIORITY_NORMAL です。
Startしていない場合、値は THREAD_PRIORITY_NORMAL です。
戻り値
THREAD_PRIORITY_TIME_CRITICALリアルタイム
THREAD_PRIORITY_HIGHEST
THREAD_PRIORITY_ABOVE_NORMAL通常以上
THREAD_PRIORITY_NORMAL通常
THREAD_PRIORITY_BELOW_NORMAL通常以下
THREAD_PRIORITY_LOWEST
THREAD_PRIORITY_ABOVE_IDLEアイドル以上
THREAD_PRIORITY_IDLEアイドル

TnbThread.h206 行目に定義があります。

◆ GetThreadResult()

DWORD GetThreadResult ( void  ) const

[取得] スレッド終了値

覚え書き
スレッド中や一度も実行していない場合、値は0です。
戻り値
終了値

TnbThread.h449 行目に定義があります。

◆ IsAlive()

bool IsAlive ( void  ) const
inherited

[確認] スレッドが生きているか

戻り値
true生きている
falseいない

TnbThread.h177 行目に定義があります。

◆ operator HANDLE()

operator HANDLE ( void  ) const
inherited

[取得] スレッドのハンドル取得

戻り値
ハンドル

TnbThread.h145 行目に定義があります。

◆ PostMessage()

bool PostMessage ( UINT  message,
WPARAM  wParam = 0,
LPARAM  lParam = 0 
) const
inherited

[実行] PostThreadメッセージ

引数
messageメッセージ。
wParamWPARAM。
lParamLPARAM。
戻り値
true成功。
false失敗。

TnbThread.h238 行目に定義があります。

◆ PumpMessage()

static void PumpMessage ( HWND  hWnd)
static

[処理] メッセージポンプ.

覚え書き
入力系のメッセージは破棄します。
引数
hWndウィンドウハンドル

TnbThread.h675 行目に定義があります。

◆ Resume()

bool Resume ( void  )

[実行] レジューム.

戻り値
true成功
false失敗。

TnbThread.h660 行目に定義があります。

◆ SetAffinityMask()

DWORD_PTR SetAffinityMask ( DWORD_PTR  affinityMask)
inherited

[設定] プロセッサアフィニティマスク設定.

引数
affinityMaskアフィニティマスク。各ビットはこのスレッドを実行できるプロセッサを表します。
戻り値
0エラー。
0以外以前のアフィニティマスク。

TnbThread.h255 行目に定義があります。

◆ SetOwnerHwnd()

void SetOwnerHwnd ( HWND  hOwner)

[設定] 関連ウィンドウハンドル設定.

スレッド終了時にポンプするウィンドウハンドルを指定します。

覚え書き
スレッド内で、 SendMessage() を使う処理がある場合、停止時デットロックする可能性があります。 これは、終了待ち中、ポンプが停止するために発生します。 よって、スレッド内で、 SendMessage() を使う処理がある場合、本メソッドでメインウィンドウの ハンドルを指定しておく必要があります。
引数
hOwnerウィンドウハンドル

TnbThread.h439 行目に定義があります。

◆ SetPriority()

bool SetPriority ( int  priority = THREAD_PRIORITY_NORMAL)
inherited

[設定] 優先度設定

引数
priority優先度。 GetPriority() の戻り値を参照。
戻り値
true成功.
false失敗.

TnbThread.h217 行目に定義があります。

◆ SetRunner()

bool SetRunner ( IRunner pRunner)

[設定] ランナー、設定

覚え書き
スレッドが生きている場合、エラーになります。
引数
pRunnerランナー
戻り値
true成功
false失敗(スレッドが生きている)

TnbThread.h420 行目に定義があります。

◆ Start()

bool Start ( LPCTSTR  lpszName = NULL)

[設定] スレッド開始

引数
lpszNameスレッドの名前(DEBUG以外では無視されます)
戻り値
true成功
false失敗(ランナーが未登録/スレッド起動失敗/既にスレッド実行中)

TnbThread.h618 行目に定義があります。

◆ Stop()

bool Stop ( DWORD  dwWait = 15000)

[設定] スレッド停止 スレッドに対して停止要求します。

覚え書き
スレッドが終了するかタイムアウトするまで、待ちます。
引数
dwWaitスレッド終了要求してから待つ時間。 0なら永久に待ち、省略すると15秒待ちます。 それ以上たっても終わらないとTerminateします。
戻り値
true成功(スレッドを開始していない時やTerminateした時も成功としています)
false失敗(リスナースレッド内で Stop() を使用すると失敗します)

TnbThread.h505 行目に定義があります。

◆ StopRequest()

void StopRequest ( void  )

[設定] スレッド停止要求.

スレッドに対して停止要求します。

覚え書き
スレッドが終了するのを待ちません。
注意
多用すべきではありません。使用する場合、終了通知 で終了を確認するようにしてください。

TnbThread.h478 行目に定義があります。

◆ Suspend()

void Suspend ( void  )

[実行] サスペンド.

覚え書き
このサスペンドは、 IRunneble::IsRunnable() の中で、Suspend します。 そのためサスペンドのタイミングをコントロールすることが出来ます。

TnbThread.h647 行目に定義があります。

◆ Terminate()

bool Terminate ( DWORD  result = 0)

[設定] スレッド中断

注意
通常、スレッド内に終了させる機能を用意すべきです。
引数
resultスレッド終了値
戻り値
true成功。
false失敗。

TnbThread.h461 行目に定義があります。

メンバ詳解

◆ m_hOwnerWnd

HWND m_hOwnerWnd
protectedinherited

オーナーウィンドウ

TnbThread.h269 行目に定義があります。

◆ m_hThread

HANDLE m_hThread
protectedinherited

スレッドのハンドル

TnbThread.h267 行目に定義があります。

◆ m_threadId

DWORD m_threadId
protectedinherited

スレッドのID

TnbThread.h268 行目に定義があります。