第11講 Windowsアプリケーションソフト開発するための準備と実際
第1話 第2部の進め方について
この講義を始めた当初は、
第1部でWin32アプリケーションソフトを扱い、
第2部あたりでWindowsフォームアプリケーションソフトを扱う予定でしたが、
 
 ※ VC++2010入門講義の第36講 複数のソフトをナビゲーションソフトから起動する(マルチスレッド研究)☆☆
    第1話 ナビゲーションソフトから複数のソフトを起動するとは?
  を参照して下さい。

第1部を進めていく内に、
この講義はWin32アプリケーションソフト開発一本で進めるべきだと考えるようになりました。
Win32アプリケーションでもかなり高度なソフトが開発できるからです。
それに、おそらく第1部を学んだ皆さんは、
魔方陣の高度化・高速化や数独自動生成ソフトなどに興味を持ち、
続きを学びたいだろうと考えたことも理由の1つです。
そして、Windowsフォームアプリケーションソフト開発については、
『VC++ 2017 入門』という別の講義を計画するようになりました。

ですが、おそらくまもなくVisual Studio Community 2019ないしは、
Visual Studio Community 2020が投入されでしょうし、
Excel2019の発売も予定されていて、
Visual Studio Community 2019入門やExcel2019VBA入門などの講義も展開しなければ、
ならない時期が目前に迫ってきています。
Win32アプリケーションソフト開発のみでも第4部ぐらいまで展開するほど内容がありますし、
同じくWindowsフォームアプリケーションソフト開発でも同じぐらいの分量があります。
さらにVisual Studio Community 2017にはVisual Basic・Visual C#やVisual C++もあり、
いずれでも同じく両方ありますので、
かなりの分量になり、
手に負えなくなるという風に考えるようになったのです。

実はC言語とC++ではマイクロソフトはVisual Studio Community 2017においては、
Windowsフォームアプリケーションを推奨していないですし、
VC++2010で新しいプロジェクトを作るときにように、
選択肢にありません。
ですが、ちょっと工夫すればWindowsフォームアプリケーションを作れることを発見しましたし、
問題なく動くことも確認しています。
そして、何よりも魅力的に思えたことは、
25スレッド数独自動生成ソフトの開発が簡単にできることを見いだしたことです。
これはマルチスレッドプログラミングです。
それに対して第1部で扱ったプログラミングはすべてシングルスレッドプログラミングです。
マルチもスレッドの意味ももちろん初心者にはわかりませんし、
普通の講義では初心者に対してマルチスレッドプログラミングは教えません。
中級の内容であると考えられているからです。
ですが、初心者の方にも容易に理解できるほど、
簡単にできる方法を発見したのです。

マルチスレッドプログラミングとは、
並列処理プログラミングです。
それに対してシングルスレッドプログラミングの方は、
直列プログラミングです。
マルチスレッドとは多数のスレッドという意味で、
各スレッドの中では直列プログラミングなのです。
ですが、マルチスレッドとは異世界を複数立ち上げて、
異世界でも例えば数独自動生成に
同時に挑戦させることができます。
同時に探索させることが出来ること=並列処理です。
数独を自動生成させるためには限りなく試行錯誤をしなければならないのですが、
異世界を25も作り出して、
それぞれのスレッド(異世界)が数独問題探索をやれば、
発見できる可能性は25倍になります。
私のパソコンは論理CPUが8個でシングルスレッドだと、
CPU使用率はたったの17%程度しかありません。
  ※論理CPUとは見かけのCPU個数ですが、今のパソコンは8個の論理CPUであれば、
   ほぼ物理的に6個から7個のCPUを積んでいるのに近いのです。

つまり、コンピュータが持っている能力の1/5も引き出せていないわけです。
CPU使用率を100%に持って行くにはスレッド=異世界を最低でも5個は起動して、
探索させなければなりません。
コンピュータの能力を最大限に引き出すには、
たくさんの異世界を同時に起動するマルチスレッドプログラミングをしなければならないわけです。
マルチスレッド
図のソフトナビゲーション以外のWindowsフォームが新に起動した異世界(スレッド)です。
ただし、図のフォームには何もプログラミングを実装していませんので、
ただの白紙になっていますが。
この第11講以内で25スレッドプログラミングを体験していただきます。
各スレッドがたちまちの内にそれぞれ数独解答を形成します。
0.01秒もかからずに25個の別の解答を作成してしまいます。
体験は簡単なものでコピペするだけです。
0101
例えば、将棋ソフトはマルチスレッドプログラミングになっています。
将棋も囲碁もマルチスレッドプログラミングが向いている対象です。
なぜなら、可能な手がA・B・C・D・Eがあったとすれば、
それは別の探索ですし、異世界です。
樹形図を考えればわかります。
001
Aを指した場合とBを指した場合では将棋や囲碁では別の世界=局面になります。
直列処理であるシングルスレッドで処理する場合には、
Aの場合の分析が終わってからBの分析にはじめて入れます。
A→B→C→D→E
の順でしか処理が出来ないのです。
前の処理が終わるまで次の処理には入れないのです。
これが直列の意味です。
シングルスレッドでは
同時に処理することは出来ないのです。
ですが、5スレッドプログラミングなら、
A・B・C・D・Eの分析を並行して
同時に行うことが出来ます。
ノートパソコンでも論理CPUは4個あるのが普通です。
私のノートパソコンは論理CPUが8個あります。
基本的には論理CPUの数だけスレッドを用意しても、
コンピュータは問題なく処理します。
論理CPUが8個しかないのに、
25個もスレッドを立てると逆に処理が少し遅くなることが、
私の実験でわかっています。
論理CPUが8個であれば、大体6スレッドか7スレッドのときに、
最も速く処理出来ることが実験した結果わかっているのです。
この実験結果は、素数探索や魔方陣探索などをやらせた結果です。
ですが、不思議なことに25スレッドのマルチスレッドプログラミングでも
数独探索の場合にはCPU使用率は75%ぐらいでまだコンピュータは余力を残しています。
ですから、最も早く数独を見つけるには、
30スレッドプログラミングあたりがよいということになりそうです。
初心者も簡単にマルチスレッドプログラミングができる!
ということを発見してWindowsフォームアプリケーションを解説したいという衝動が抑えられなくなりました。
さらに決定的な理由はWindowsフォームアプリケーションであっても、
素数や魔方陣などの結果を表示することは難しくないのです。
結果をWindowsフォームに表示すればよいのです。

それで、第2部はWindowsフォームアプリケーション開発にすることにしました。


第10講第8話へ 第2話へ
 
002

初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ