Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。4作業中というメッセージを表示するダイアログを表示するCPUパワーを利用する作業中というメッセージを表示するここまでは、処理中の表現をマウスカーソルだけに頼ってきました。時間が2~3秒程度の処理であればこれでも十分ですが、それを超えるような時間のかかる処理となるとそうもいきません。そこで時間がかかる処理を行っていることをより具体的に意思表示するためにダイアログを表示することにします。ダイアログを表示するBusyLoop3を改めて確認してみると、ウィンドウを無効化してる状態をダイアログが表示される期間とすることができれば問題はなさそうに思えます。その前提でダイアログを用意することにしましょう。ダイアログテンプレートです。4,4,260,16,SS_CENTERIMAGEENDイメージは次のようになります。ダイアログイメージ(Windows7)続いて、今回のモードレスダイアログ用に用意したダイアログプロシージャです。FALSE;}上記がそろえば、ダイアログを作ることができます。BusyLoopV3を改造し、モードレスダイアログを表示するようにしたものが下記のものとなります。}}モードレスダイアログなので、オーナーウィンドウを無効化する必要がある点は変わりありません。ウィンドウの無効化・有効化と、ダイアログの作成・破棄のタイミングをいろいろいじってみると動作が変わります。この記事では本題から外れるため、特に触れるようなことはしませんが、モードレスダイアログの場合、ダイアログ破棄のタイミングでいろいろと処理をする必要が出る場合もあるため、意図しないところで処理が煩雑になるという問題があります。その場合は順番を変えてみるなど、いろいろ試してみてください。実際に動かしてみましょう。タスクマネージャを起動して、パフォーマンスタブに切り替え、グラフの画面が見える状態にしたまま、マウスでキャプション上で左ボタンをダウンしてドラッグ状態にしてください。(最大1秒程度)待っていると、マウスカーソルが通常の矢印カーソルに戻ると同時に、CPUの利用量が変わったのではないでしょうか。CPUパワーを利用するここまでの部分は、16bit時代と変わらないいわば古い技法です。行儀が悪いというほどではないため今でも十分利用可能ですが、ユーザー操作に迅速に反応するためにはどうしてもメッセージ処理を随所に挟む必要があるので、処理効率があがりませんし、本来のロジックの合間に別の処理を挟む形になるため、メンテナンス性の低いプログラムソースになってしまいがちです。動作を見て分かるように、本来の処理に集中させたい作業時間をメッセージ処理にとられてしまうため(ドラッグ処理など)、CPUパワーが余っているかどうかにかかわりなく、処理を行うことができないという状況が発生することがあります。全力で作業していた部分を応答なしに見えてしまうからという理由だけで全力を出さないのは、もったいない話です。Win32では、CPUパワーを余すことなく使うために、マルチスレッドという1つのプログラム内で、複数同時に実行する仕組みが用意されています。後編では、このマルチスレッド技術を利用して、メッセージ処理と本来の作業を別々に進行させる方法と、VS2010で導入された同時実行ライブラリを利用した方法を紹介したいと思います。系を中心にオンライン/オフラインで活動しています。モブプログラミングを取り入れて開発を効率化させるヒント9企業の7割超が「2025年の崖」を理解していないことが明らかに。モブプログラミングを取り入れて開発を効率化させるヒント9企業の7割超が「2025年の崖」を理解していないことが明らかに。モブプログラミングを取り入れて開発を効率化させるヒント9企業の7割超が「2025年の崖」を理解していないことが明らかに。5.0」がリリース新着記事一覧を見るイベント今後の予定を見るCodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。イラストの無断転載を禁じます。記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。