マネージドスレッドのアンマネージドスレッドの ID を取得する
■コード(.CS)
// サブスレッド
Thread m_SubThread;
// サブスレッドの ID
uint m_SubThreadId;
// サブスレッドの生成&起動
void BootThread()
{
// ----------------
// サブ・スレッドへのパラメータを生成
CSubThreadParam param = new CSubThreadParam();
// ----------------
// サブ・スレッドを生成&起動
m_SubThread = new Thread( SubThreadProc );
m_SubThread.Start( param );
// ----------------
// サブ・スレッドのスレッド ID を取得
bool bUpdate = false;
// サブ・スレッドでスレッド ID を取得するまでループ
do
{
Thread.Sleep( 200 );
lock( param.m_lockObject )
{
bUpdate = param.m_bUpdate;
m_SubThreadId = param.m_nThreadId;
}
}while( bUpdate == false );
// ここ以降はサブ・スレッドの ID を利用できる
}
// サブスレッド
void SubThreadProc( Object cntxt )
{
CSubThreadParam param = (CSubThreadParam)cntxt;
// スレッド ID を取得
lock( param.m_lockObject )
{
param.m_bUpdate = true;
param.m_nThreadId = GetCurrentThreadId();
}
// ここで何かしらの処理
}
// サブスレッドへのパラメータ
// サブスレッドの ID を取得するためのもの
// 各フィールドは lock ステートメント内でアクセスすること
class CSubThreadParam
{
// ロックオブジェクト
public Object m_lockObject = new Object();
public bool m_bUpdate = false;
public uint m_nThreadId = 0;
}
[DllImport(@"Kernel32.dll")]
extern static UInt32 GetCurrentThreadId();