スレッド管理クラス
[詳解]
#include <TnbThread.h>
スレッド管理クラス
IRunner を一つ管理し、スレッドで動かします。
- 使用例
class CMyThread : public CThread::IRunner
{
public:
{
m_thread.SetRunner(this);
m_thread.Start();
}
protected:
virtual DWORD Run(void)
{
while ( IsRunnable() )
{
;
}
return 0;
};
};
bool Start(LPCTSTR lpszName=NULL)
[設定] スレッド開始
- 必要ファイル
- 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.h の 315 行目に定義があります。
◆ CThread()
◆ ~CThread()
◆ GetHandle()
HANDLE GetHandle |
( |
void |
| ) |
const |
|
inherited |
◆ GetId()
DWORD GetId |
( |
void |
| ) |
const |
|
inherited |
◆ 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.h の 206 行目に定義があります。
◆ GetThreadResult()
DWORD GetThreadResult |
( |
void |
| ) |
const |
[取得] スレッド終了値
- 覚え書き
- スレッド中や一度も実行していない場合、値は0です。
- 戻り値
- 終了値
TnbThread.h の 449 行目に定義があります。
◆ IsAlive()
bool IsAlive |
( |
void |
| ) |
const |
|
inherited |
◆ operator HANDLE()
operator HANDLE |
( |
void |
| ) |
const |
|
inherited |
◆ PostMessage()
bool PostMessage |
( |
UINT |
message, |
|
|
WPARAM |
wParam = 0 , |
|
|
LPARAM |
lParam = 0 |
|
) |
| const |
|
inherited |
[実行] PostThreadメッセージ
- 引数
-
message | メッセージ。 |
wParam | WPARAM。 |
lParam | LPARAM。 |
- 戻り値
-
TnbThread.h の 238 行目に定義があります。
◆ PumpMessage()
static void PumpMessage |
( |
HWND |
hWnd | ) |
|
|
static |
◆ Resume()
◆ SetAffinityMask()
DWORD_PTR SetAffinityMask |
( |
DWORD_PTR |
affinityMask | ) |
|
|
inherited |
[設定] プロセッサアフィニティマスク設定.
- 引数
-
affinityMask | アフィニティマスク。各ビットはこのスレッドを実行できるプロセッサを表します。 |
- 戻り値
-
TnbThread.h の 255 行目に定義があります。
◆ SetOwnerHwnd()
void SetOwnerHwnd |
( |
HWND |
hOwner | ) |
|
[設定] 関連ウィンドウハンドル設定.
スレッド終了時にポンプするウィンドウハンドルを指定します。
- 覚え書き
- スレッド内で、 SendMessage() を使う処理がある場合、停止時デットロックする可能性があります。 これは、終了待ち中、ポンプが停止するために発生します。 よって、スレッド内で、 SendMessage() を使う処理がある場合、本メソッドでメインウィンドウの ハンドルを指定しておく必要があります。
- 引数
-
TnbThread.h の 439 行目に定義があります。
◆ SetPriority()
bool SetPriority |
( |
int |
priority = THREAD_PRIORITY_NORMAL | ) |
|
|
inherited |
◆ SetRunner()
bool SetRunner |
( |
IRunner * |
pRunner | ) |
|
[設定] ランナー、設定
- 覚え書き
- スレッドが生きている場合、エラーになります。
- 引数
-
- 戻り値
-
true | 成功 |
false | 失敗(スレッドが生きている) |
TnbThread.h の 420 行目に定義があります。
◆ Start()
bool Start |
( |
LPCTSTR |
lpszName = NULL | ) |
|
[設定] スレッド開始
- 引数
-
lpszName | スレッドの名前(DEBUG以外では無視されます) |
- 戻り値
-
true | 成功 |
false | 失敗(ランナーが未登録/スレッド起動失敗/既にスレッド実行中) |
TnbThread.h の 618 行目に定義があります。
◆ Stop()
bool Stop |
( |
DWORD |
dwWait = 15000 | ) |
|
[設定] スレッド停止 スレッドに対して停止要求します。
- 覚え書き
- スレッドが終了するかタイムアウトするまで、待ちます。
- 引数
-
dwWait | スレッド終了要求してから待つ時間。 0なら永久に待ち、省略すると15秒待ちます。 それ以上たっても終わらないとTerminateします。 |
- 戻り値
-
true | 成功(スレッドを開始していない時やTerminateした時も成功としています) |
false | 失敗(リスナースレッド内で Stop() を使用すると失敗します) |
TnbThread.h の 505 行目に定義があります。
◆ StopRequest()
void StopRequest |
( |
void |
| ) |
|
[設定] スレッド停止要求.
スレッドに対して停止要求します。
- 覚え書き
- スレッドが終了するのを待ちません。
- 注意
- 多用すべきではありません。使用する場合、
終了通知
で終了を確認するようにしてください。
TnbThread.h の 478 行目に定義があります。
◆ Suspend()
[実行] サスペンド.
- 覚え書き
- このサスペンドは、 IRunneble::IsRunnable() の中で、Suspend します。 そのためサスペンドのタイミングをコントロールすることが出来ます。
TnbThread.h の 647 行目に定義があります。
◆ Terminate()
bool Terminate |
( |
DWORD |
result = 0 | ) |
|
[設定] スレッド中断
- 注意
- 通常、スレッド内に終了させる機能を用意すべきです。
- 引数
-
- 戻り値
-
TnbThread.h の 461 行目に定義があります。
◆ m_hOwnerWnd
◆ m_hThread
◆ m_threadId