MTMDI でサンプル:MFC ユーザー インターフェイス スレッドを示します
MTMDI サンプルでは、ユーザー インターフェイス イベントがメイン アプリケーション スレッドとは別のスレッドで処理される、MFC ユーザー インターフェイス スレッドの例を示します。 このサンプルは、シングルスレッド MDI サンプルを変更したものです。
MTMDI では、ボールが弾むウィンドウを別のスレッドに置くことが合理的であると説明しているわけではありません。 シングル プロセッサ コンピューターの場合は、MDI サンプルと MTMDI サンプルの違いがわからない可能性があります。 マルチプロセッサ コンピューターでも、ウィンドウ タイマーに基づいてボールが動いている場合は、この違いがわからない可能性があります。
しかし、MTMDI では MFC ユーザー インターフェイス スレッドを実装する方法を示しています。 MDI サンプルと MTMDI サンプルのソースを比較して、MFC ユーザー インターフェイス スレッドを使用した場合のプログラミング オーバーヘッドに注目してください。
MTMDI のプログラミング オーバーヘッドは、ユーザー インターフェイス スレッドを使用するにはプログラミング コストを正当化できる相当の理由が必要であることを警告しています。 MFC でよく使用されるスレッドのタイプはワーカー スレッドです。ワーカー スレッドの例は、MTRECALC サンプルにあります。
セキュリティに関するメモ |
---|
このサンプル コードは概念を示すためのものであり、その概念に関連するコードのみを示しています。特定の環境について必ずしもセキュリティ要件を満たしていませんので、そのまま使用しないでください。セキュリティおよびエラー処理コードを追加して、プロジェクトをより安全かつ堅牢にすることをお勧めします。これらのサンプル コードは、現状有姿のままで提供されるものであり、一切保証されていません。 |
サンプルとそのインストール手順を取得するには
Visual Studio のサンプルにアクセスするには
[ヘルプ] メニューの [サンプル] をクリックします。
既定では、これらのサンプルは drive:\Program Files\Microsoft Visual Studio 10.0\Samples\ にインストールされています。
サンプルのビルドと実行
MTMDI サンプルをビルドおよび実行するには
MtMdi.sln ソリューション ファイルを開きます。
[ビルド] メニューの [ビルド] をクリックします。
でデバッグ メニューの、[デバッグなしで開始 をクリックします。
ファイル メニューを使用して 2 つの異なる種類の新しいウィンドウを作成することができます。 ウィンドウを作成すると、アプリケーションは、これらのメニューのいずれかのコマンドを使用して、ウィンドウ内の項目の属性を変更くれます。 Color, Speed, Window, and Help. なお、「こんにちは!」ウィンドウには、速度 メニューはありません。
MTMDI 利用の独自の CWinThread- CBounceThread と呼ばれるクラスを派生します。 CBounceThread Mtbounce.cpp ファイルで実装されています。 このスレッドには、ウィンドウ内で弾むボールをアニメーション表示するために必要な描画とタイミングのすべてのコードが含まれています。
アプリケーションでは、MDI 子ウィンドウが作成されるのと同様に、各スレッドが作成されます。 これは Bounce.cpp で見つかった CBounceMDIChildWnd::Create 関数で発生します。 この関数は、ウィンドウと、スレッドのウィンドウに関連付けて、スレッドの両方を作成します。
ボールが弾むウィンドウを閉じると、関連付けられたスレッドは自動的に破棄されます。 [Hello] ウィンドウには独自のスレッドがないため、メッセージはアプリケーションのプライマリ スレッドによって処理されます。
Keywords
このサンプルでは、次のキーワードを使用します。
AfxGetInstanceHandle; AfxMessageBox; AfxRegisterWndClass; CBitmap::CreateCompatibleBitmap; CCmdTarget::OnCmdMsg; CCmdUI::SetCheck; CColorDialog::DoModal; CColorDialog::GetColor; CDC::BitBlt; CDC::CreateCompatibleDC; CDC::DeleteDC; CDC::DrawText; CDC::Ellipse; CDC::FillRect; CDC::GetDeviceCaps; CDC::SelectObject; CDC::SetBkColor; CDC::SetTextColor; CFrameWnd::LoadFrame; CFrameWnd::rectDefault; CGdiObject::DeleteObject; CMDIChildWnd::Create; CMenu::LoadMenu; CRect::Height; CRect::Width; CWinApp::ExitInstance; CWinApp::InitInstance; CWnd::Create; CWnd::DestroyWindow; CWnd::GetClientRect; CWnd::GetCurrentMessage; CWnd::GetDC; CWnd::GetDlgItem; CWnd::GetWindow; CWnd::Invalidate; CWnd::KillTimer; CWnd::MessageBox; CWnd::OnCreate; CWnd::OnDestroy; CWnd::OnLButtonDown; CWnd::OnPaint; CWnd::OnSize; CWnd::OnTimer; CWnd::ReleaseDC; CWnd::SendMessage; CWnd::SetTimer; CWnd::SetWindowPos; CWnd::ShowWindow; CWnd::UpdateWindow; CloseHandle; CreateEvent; CreateThread; EnumChildWindows; GetSysColor; GetVersion; LOWORD; LoadCursor; LoadIcon; LoadMenu; MAKEINTRESOURCE; RGB; SetEvent; Sleep; WaitForSingleObject; max; min
注意
このサンプルを含む一部のサンプルには、Visual C++ のウィザード、ライブラリ、およびコンパイラの変更が反映されていませんが、必要なタスクを実行する方法は示されています。