- りばぁ
- 大ベテラン
- 会議室デビュー日: 2003/11/26
- 投稿数: 130
- お住まい・勤務地: 愛知県
|
投稿日時: 2004-05-07 09:45
引用: |
|
NAL-6295さんの書き込み (2004-05-06 12:03) より:
引用: |
|
Jittaさんの書き込み (2004-05-06 11:50) より:
フォームを、モードレスで表示すると、メインフォームとは別のスレッド(なのかな?)で動作します。したがって、メインフォームと、ポーリングの結果によって表示を決定するフォーム(仮に「ポーリングフォーム」)は、何も考えずにプログラミングして良いと思います。
|
NAL-6295です。
ここだけ、気になったので。
フォームを、モードレスで表示しても、別のスレッドにはなりません。
|
こんにちは。
VC++の、少なくともMFCアプリは画面ごとにスレッドが起こされますが(メッセージボックスや
ダイアログボックスは違うかもしれませんが)VBでは同じスレッドになってしまうんですか?
VB6以前なんかでは、スレッドなんて考える必要はあまり無かったと思いますが、.NETになって
スレッドも普通に扱えると思うので、意識しないといけないですよね。
|
- なちゃ
- ぬし
- 会議室デビュー日: 2003/06/11
- 投稿数: 872
|
投稿日時: 2004-05-07 10:00
引用: |
|
引用: |
|
フォームを、モードレスで表示しても、別のスレッドにはなりません。
|
VC++の、少なくともMFCアプリは画面ごとにスレッドが起こされますが(メッセージボックスや
ダイアログボックスは違うかもしれませんが)VBでは同じスレッドになってしまうんですか?
|
MFCって画面毎に別のスレッドになるんですか?
ちょっと考えにくいような気がするんですが…
※私はMFCは素人なので、なんとなくで書いてます、すみません。
|
- NAL-6295
- ぬし
- 会議室デビュー日: 2003/01/26
- 投稿数: 966
- お住まい・勤務地: 東京
|
投稿日時: 2004-05-07 10:10
引用: |
|
りばぁさんの書き込み (2004-05-07 09:45) より:
引用: |
|
NAL-6295さんの書き込み (2004-05-06 12:03) より:
ここだけ、気になったので。
フォームを、モードレスで表示しても、別のスレッドにはなりません。
|
こんにちは。
VC++の、少なくともMFCアプリは画面ごとにスレッドが起こされますが(メッセージボックスや
ダイアログボックスは違うかもしれませんが)VBでは同じスレッドになってしまうんですか?
VB6以前なんかでは、スレッドなんて考える必要はあまり無かったと思いますが、.NETになって
スレッドも普通に扱えると思うので、意識しないといけないですよね。
|
VB6でも、.NETでも、別スレッドにはならないですね。
で、VB6の時代はスレッドを考慮する必要は無かったのですが、タイマーコントロールでタイミングを取って処理をする場合
引用: |
|
やはり同一スレッドである限り、同時に実行できるスレッドは一つなので、例えばメインフォームから実行されるForm2でタイマーを利用したポーリング処理を記述していたとしても、メインフォーム側でそのタイマー間隔より時間のかかる処理が実行されている間は、Form2側でそのタイマーのタイミングが来ても実行されないわけで、メインフォームで実行されている処理が終わった後に実行されるのです。
だから、そこのところは気を使う必要があります。
|
という事になるわけです。
例を挙げるなら、
コード: |
|
public class Form2 : System.Windows.Forms.Form
{
////省略
////省略
private void Form2_Load(object sender, System.EventArgs e)
{
while(true)
{
}
}
}
|
開こうとすると無限ループするというForm2クラスを用意して、
これに対して
コード: |
|
public class Form1 : System.Windows.Forms.Form
{
////省略
////省略
private void button1_Click(object sender, System.EventArgs e)
{
Form2 frm = new Form2();
frm.Show();
}
}
|
だと、同一スレッドなので、frm.Show()以降に進むことはありません。
つまり、Form1は固まります。
コード: |
|
public class Form1 : System.Windows.Forms.Form
{
////省略
////省略
private void button1_Click(object sender, System.EventArgs e)
{
Thread th = new Thread(new System.Threading.ThreadStart(FormOpen));
th.Start();
}
private void FormOpen()
{
Form2 frm = new Form2();
frm.Show();
}
}
|
だと、Form1とForm2は別のスレッドなので、Form1側は固まりません。
という事です。
|
- りばぁ
- 大ベテラン
- 会議室デビュー日: 2003/11/26
- 投稿数: 130
- お住まい・勤務地: 愛知県
|
投稿日時: 2004-05-07 11:23
引用: |
|
なちゃさんの書き込み (2004-05-07 10:00) より:
引用: |
|
引用: |
|
フォームを、モードレスで表示しても、別のスレッドにはなりません。
|
VC++の、少なくともMFCアプリは画面ごとにスレッドが起こされますが(メッセージボックスや
ダイアログボックスは違うかもしれませんが)VBでは同じスレッドになってしまうんですか?
|
MFCって画面毎に別のスレッドになるんですか?
ちょっと考えにくいような気がするんですが…
※私はMFCは素人なので、なんとなくで書いてます、すみません。
|
こんにちは。
すみません。かなりてきとーなことを書いてしまったので(自分に)誤解があるかもしれません。^^;
画面ごとにメッセージループが作成される−>ユーザーインターフェーススレッドが作成される
という認識だったのですが。
|