第11講 Windowsアプリケーションソフト開発するための準備と実際
第4話 マルチスレッドの体験=MyForm1を起動する
まず、MyForm1を付け加えるために、
011
の青い帯のところで右クリックして、
012
追加→新しい項目の順で選びます。
013
名前が
001と自動的に入りますので、
変更せずに追加します。
すると、
002
となりますが、これはVisual Studio Community 2017をいったん終了してから、
再度003プロジェクトを開いてから、
002を×をクリックして、
004赤い囲いをダブルクリックすると、
005
となり問題が解消されます。
ときどき、
002
となりますが、同じようにすれば良いですし、
デバッグ(F5)ときには何も問題ありません。
次に、
004
緑の囲いをダブルクリックして、
011MyFormの中でダブルクリックして、
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を押してみましょう。
すると、
012
確かに、MyForm1が立ち上がります。
MyForm1を少しずらしてみると、
013
と確かに2つのスレッドがあることがわかります。
×で2つとも閉じか、
あるいは014
赤い囲い(デバッグの中止)をクリックしてから、
    
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();

と変更すると、
015
と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個のフォーム
016が立ち上がることが。
    
Thread^ t1 = gcnew Thread(gcnew ThreadStart(f1));
    t1->Start();

によって新にスレッド(異世界=フォーム)が立ち上がることは、推測できますね。
この奇妙なコードはいったい何を意味しているのでしょうか。
次話で説明します。




第3話へ  第5話へ
 
002

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

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