プログレスバーを使用した簡単なスレッド
【概要】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);
}