プログレスバーを使用した簡単なスレッド


【概要】APIを使用して簡単なスレッドを作成する方法を紹介します。

【API】CreateThread

	HANDLE CreateThread(
                   LPSECURITY_ATTRIBUTES lpThreadAttributes,       //子プロセスへの継承を許可するかどうかを決める
                   DWORD dwStackSize,                              //新しいスレッドが持つスタックのサイズ
                   LPTHREAD_START_ROUTINE lpStartAddress,          //新しいスレッドの開始アドレス
                   LPVOID lpParameter,                             //スレッドに渡す 32 ビット値
                   DWORD dwCreationFlags,                          //スレッド作成に関する制御フラグ
                   LPDWORD lpThreadId                              //DWORD 型の変数へのポインタを指定
        );
  
       「詳細は、MSDNなどを参照して下さい。」

【Sample】
//プログレスバーを操作するスレッド
void barThread(CProgressCtrl* myProgbar)
{
	int i;

 	myProgbar->SetRange32(0,100);
	for(i = 0; i < 100; i++){
		myProgbar->SetPos(i);
		Sleep(100);
	}

	//Threadを終了
	ExitThread(0);

}

//スレッド実行用ボタン
void CThreadsapDlg::OnStart1Button() 
{
	HANDLE hThread;
	DWORD threadID;

	//操作対象のプログレスバーを取得
	CProgressCtrl* myProgbar = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS1);

	//スレッドの実行
	hThread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)barThread,
				(VOID *)myProgbar, 0, &threadID);

}

//スレッド実行用ボタン
void CThreadsapDlg::OnStart2Button() 
{
	HANDLE hThread;
	DWORD threadID;

	//操作対象のプログレスバーを取得
	CProgressCtrl* myProgbar = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS2);

	//スレッドの実行
	hThread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)barThread,
				(VOID *)myProgbar, 0, &threadID);
	
}

//スレッド実行用ボタン
void CThreadsapDlg::OnStart3Button() 
{
	HANDLE hThread;
	DWORD threadID;

	//操作対象のプログレスバーを取得
	CProgressCtrl* myProgbar = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS3);

	//スレッドの実行
	hThread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)barThread,
				(VOID *)myProgbar, 0, &threadID);	
}