第36講 複数のソフトをナビゲーションソフトから起動する(マルチスレッド研究)☆☆
第9話 
謎の解明!
第8話の2つの謎が解明できました。
グローバル変数は、
『Form5の変数であれば、Form5・Form4・Form3・Form2
のいずれか1つののnamespaceの中で宣言する。

Form4の変数であれば、Form4・Form3・Form2
のいずれか1つののnamespaceの中で宣言する。

Form3の変数であれば、Form3・Form2
のいずれか1つののnamespaceの中で宣言する。

Form2の変数であれば、Form2
のnamespaceの中で宣言する。

要するに、Form1から起動したForm*は*以下で2以上のForm*で宣言すればよいです。
ですから、変数は各Formの中でしか有効でないという前の記述は間違いです。
正しくは、
Form△のnamespaceの中で宣言した変数は、
すべてのForm□(□≧△
)で共有しているのです。
namespaceというのは、名前空間と訳されますが、
名前空間の意味は、変数や関数の有効範囲という意味です。
したがって、変数の有効範囲は各Formの限定されるのでなく、
□≧△をみたす、すべてのForm□が有効範囲ということになります。
ですから、Fomr*(*≧2)で使う変数は、すべて
Form2の名前空間(namespace)の中で、宣言すればよいのです。

もう一つの謎
現在の『スレッドの起動』の場合は、
これでは動かず
#pragma once
#include <math.h>
#include<stdlib.h>
#include<set>
using namespace std;
int s1[25000000],s2[25000000],s3[25000000],s4[25000000];
namespace 素数探索4スレッド {
  int N;
  int cn1,cn2,cn3,cn4;
  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;
            ・
            ・
            ・
の問題も自ずと解決できます。
Form2の名前空間で、宣言するとFomr*(*≧2)で変数が共有されてしまいますので、
数独検索ソフト(Form3)の名前空間で宣言した
static int s1,s2,s3,s4;
と名前が重なりエラーしてしまうのです。

だから、例えば
static int ss1[25000000],ss2[25000000],ss3[25000000],ss4[25000000];
などと変更すればよいのです。

ですから、グローバル変数はすべてnamespaceの前で記述しても、
namespaceの中で記述してよいということになりますが、
複数のFormを立ち上げるときには、
namespaceの中で宣言した方がよいという結論になります。

皆さん、Form3以降ではすべて宣言部分は削り、
宣言はすべてForm2で行ってください。
次の魔方陣検索ソフトの実装を考えて
Form2は、
#pragma once
#include <math.h>
#include<stdlib.h>
#include<set>
using namespace std;
namespace スレッドの起動 {
  
static int ss1[25000000],ss2[25000000],ss3[25000000],ss4[25000000];
  static int nn;
  static int cnn1,cnn2,cnn3,cnn4;
  static int n;
  static int a3[10][10],a4[10][10],as1[100][10][10],as2[100][10][10],as3[100][10][10],as4[100][10][10];
  static int a1[20][20],a2[20][20],p[20][20],cn1[20],cn2[20];
  static int x[400],y[400];
  static int s;
  static int s1,s2,s3,s4;
           

           
としておきましょう。
それでは、コピペとクイック置換をうまく組み合わせて、魔方陣探索ソフトを実装してください。

どうしても、うまくいかない人のためにヘッダファイル5つをダウンロードできるようにしておきます。
コピペを利用して、内容を変更してください。
Form1.hForm2.hForm3.hForm4.hForm5.h

最後に、円周率計算ソフトの実装が残っていますが、
本講義ではまだ円周率を求めていませんので、
円周率計算ソフトの実装というテーマは、独立の講としたいと思います。
ですので、第36講はこれで閉めたいと思います。

第8話へ 第37講第1話へ


戻る

VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)