第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.h、Form2.h、Form3.h、Form4.h、Form5.h
最後に、円周率計算ソフトの実装が残っていますが、
本講義ではまだ円周率を求めていませんので、
円周率計算ソフトの実装というテーマは、独立の講としたいと思います。
ですので、第36講はこれで閉めたいと思います。
第8話へ 第37講第1話へ
VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual
Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)