第11講 Windowsアプリケーションソフト開発するための準備と実際
第4話 マルチスレッドの体験=MyForm1を起動する
まず、MyForm1を付け加えるために、

の青い帯のところで右クリックして、

追加→新しい項目の順で選びます。

名前が
 と自動的に入りますので、
と自動的に入りますので、
変更せずに追加します。
すると、

となりますが、これはVisual Studio Community 2017をいったん終了してから、
再度 プロジェクトを開いてから、
プロジェクトを開いてから、
 を×をクリックして、
を×をクリックして、
 赤い囲いをダブルクリックすると、
赤い囲いをダブルクリックすると、

となり問題が解消されます。
ときどき、

となりますが、同じようにすれば良いですし、
デバッグ(F5)ときには何も問題ありません。
次に、

緑の囲いをダブルクリックして、
 MyFormの中でダブルクリックして、
MyFormの中でダブルクリックして、
MyForm.hのコードを開きます。
コードをコピペによって、
#pragma once
#include"MyForm1.h"
namespace My25スレッドマルチスレッド数独探索 {
  using namespace System;
  using namespace System::ComponentModel;
  using namespace System::Collections;
  using namespace System::Windows::Forms;
  using namespace System::Data;
  using namespace System::Drawing;
  using namespace System::Threading;
  /// <summary>
  /// MyForm の概要
  /// </summary>
  public ref class MyForm : public System::Windows::Forms::Form
  {
  public:
    MyForm (void)
    {
      InitializeComponent();
      //
      //TODO: ここにコンストラクター コードを追加します
      //
    }
protected:
    /// <summary>
    /// 使用中のリソースをすべてクリーンアップします。
    /// </summary>
    ~MyForm()
    {
      if (components)
      {
        delete components;
      }
    }
  private:
    /// <summary>
    /// 必要なデザイナー変数です。
    /// </summary>
    System::ComponentModel::Container ^components;
#pragma region Windows Form Designer generated code
    /// <summary>
    /// デザイナー サポートに必要なメソッドです。このメソッドの内容を
    /// コード エディターで変更しないでください。
    /// </summary>
    void InitializeComponent(void)
    {
      this->SuspendLayout();
      //
      // MyForm
      //
      this->AutoScaleDimensions = System::Drawing::SizeF(6, 12);
      this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
      this->ClientSize = System::Drawing::Size(284, 261);
      this->Name = L"MyForm";
      this->Text = L"MyForm";
      this->Load += gcnew System::EventHandler(this, &MyForm::MyForm_Load);
      this->ResumeLayout(false);
    }
#pragma endregion
  private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^
e) {
    Thread^ t1 = gcnew Thread(gcnew ThreadStart(f));
    t1->Start();
  }
       static void f() {
         Application::Run(gcnew MyForm1());
       }
  };
}
と変更します。ピンクが付け加えた部分です。
ここでF5を押してみましょう。
すると、

確かに、MyForm1が立ち上がります。
MyForm1を少しずらしてみると、

と確かに2つのスレッドがあることがわかります。
×で2つとも閉じか、
あるいは
赤い囲い(デバッグの中止)をクリックしてから、
    Thread^ t1 = gcnew Thread(gcnew ThreadStart(f));
    t1->Start();
を
    Thread^ t1 = gcnew Thread(gcnew ThreadStart(f));
    Thread^ t2 = gcnew Thread(gcnew ThreadStart(f));
    t1->Start();
    t2->Start();
と変更すると、

と3つのフォームができます。
もう予想がつきますね。
    Thread^ t1 = gcnew Thread(gcnew ThreadStart(f));
    Thread^ t2 = gcnew Thread(gcnew ThreadStart(f));
    Thread^ t3 = gcnew Thread(gcnew ThreadStart(f));
    Thread^ t4 = gcnew Thread(gcnew ThreadStart(f));
    Thread^ t5 = gcnew Thread(gcnew ThreadStart(f));
    Thread^ t6 = gcnew Thread(gcnew ThreadStart(f));
    Thread^ t7 = gcnew Thread(gcnew ThreadStart(f));
    Thread^ t8 = gcnew Thread(gcnew ThreadStart(f));
    Thread^ t9 = gcnew Thread(gcnew ThreadStart(f));
    Thread^ t10 = gcnew Thread(gcnew ThreadStart(f));
    Thread^ t11 = gcnew Thread(gcnew ThreadStart(f));
    Thread^ t12 = gcnew Thread(gcnew ThreadStart(f));
    Thread^ t13 = gcnew Thread(gcnew ThreadStart(f));
    Thread^ t14 = gcnew Thread(gcnew ThreadStart(f));
    Thread^ t15 = gcnew Thread(gcnew ThreadStart(f));
    Thread^ t16 = gcnew Thread(gcnew ThreadStart(f));
    Thread^ t17 = gcnew Thread(gcnew ThreadStart(f));
    Thread^ t18 = gcnew Thread(gcnew ThreadStart(f));
    Thread^ t19 = gcnew Thread(gcnew ThreadStart(f));
    Thread^ t20 = gcnew Thread(gcnew ThreadStart(f));
    Thread^ t21 = gcnew Thread(gcnew ThreadStart(f));
    Thread^ t22 = gcnew Thread(gcnew ThreadStart(f));
    Thread^ t23 = gcnew Thread(gcnew ThreadStart(f));
    Thread^ t24 = gcnew Thread(gcnew ThreadStart(f));
    Thread^ t25 = gcnew Thread(gcnew ThreadStart(f));
    t1->Start();
    t2->Start();
    t3->Start();
    t4->Start();
    t5->Start();
    t6->Start();
    t7->Start();
    t8->Start();
    t9->Start();
    t10->Start();
    t11->Start();
    t12->Start();
    t13->Start();
    t14->Start();
    t15->Start();
    t16->Start();
    t17->Start();
    t18->Start();
    t19->Start();
    t20->Start();
    t21->Start();
    t22->Start();
    t23->Start();
    t24->Start();
    t25->Start();
とすれば26個のフォーム
 が立ち上がることが。
が立ち上がることが。
    Thread^ t1 = gcnew Thread(gcnew ThreadStart(f1));
    t1->Start();
によって新にスレッド(異世界=フォーム)が立ち上がることは、推測できますね。
この奇妙なコードはいったい何を意味しているのでしょうか。
次話で説明します。
第3話へ  第5話へ
 

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