

C++プログラムについて質問です。
Basicでしたら、バックグランドで処理を常に続けながら、
Formウィンドウで入力を受け付けたり、ウィンドウ表示を最新に更新させることが、
簡単にできたと思いますが、それが、C++ではできません。
例えば、以下のとき(内容は意味のないプログラムですが、)
***Form1.h 内、一部抜粋*********
for (int i = 0; i < 10000000; i++) {
double m = 123.4567;
double n = 234.5677;
double p = m * n;
double q = m / n;
if ( i % 100 == 0 ) lable1->Text = i.ToString;
}
******************************
100回に1回、Formウィンドウに計算の進行状況を表示させたいと思いますが、
途中では更新されず、計算が全て終了したときのみ更新されます。
このようなことをC++でやるには、手間がかかるのでしょうか。
C#とかなら簡単にできるのでしょうか。
分かりづらい点があるかもしれませんが、よろしくおねがいします。
No.5ベストアンサー
- 回答日時:
ちと遅い気もしますが。
(1)
フォームへの入力もイベントとして扱われますから、イベント入力待ち状態に戻れば問題なく入力可能になります。
(2)
C#が簡単というよりも、C++/CLIがVB.NETやC#と比べて言語レベルでややこしいと言う方が正確なところです。
ただしC#でもスレッドは必要なので、スレッドを使うのが面倒というならDoEventsが使えるVB.NETの方がC#よりも楽でしょう。
D-Matsuさん、ご回答ありがとうございます。
メッセージキュー、メッセージループの仕組みから、
入出力のウィンドウがフリーズすることが理解できました。
VBには、DoEventsという便利なのもがあり、C++にはないことも分かりました。
http://dobon.net/vb/dotnet/vb6/doevents.html
ここを見ると、C#もDoEventsできるようですね。
No.3
- 回答日時:
おそらくフォームのボタンを押した際などの処理と思われますが、イベント処理中は他のイベントを基本的にブロックする、つまり画面更新もされないのでそーゆー事になります。
該当の処理をイベントに依らないスレッドで処理するか、明示的に「イベントを処理する」という事を行う必要があります。
http://dobon.net/vb/dotnet/vb6/doevents.html
No.2
- 回答日時:
No.1
- 回答日時:
> Basicでしたら、バックグランドで処理を常に続けながら、
> Formウィンドウで入力を受け付けたり、ウィンドウ表示を最新に更新させることが、
> 簡単にできたと思いますが、それが、C++ではできません。
できますよ。スレッド起こすとか(C++/CLIなら)BackgroundWorker立てるとか。
epistemeさん、nora1962さん、D-Matsuさん、___gooさん
回答ありがとうございます。
すみません、基本的な情報が抜けていました。
「Visual C++ 2008 express edition」を使用しています。
D-Matsuさんのおっしゃるとおり、「フォームのボタンを押したときの処理」です。
「スレッド」でやるべきということはなんとなく分かりました。
そこで、
(1)スレッドを使えば、処理中に、表示更新だけでなく、
フォーム空欄への入力も受け付けられるのでしょうか。
(2)Visual C#を使えば、スレッドなど使わずに、簡単に実現できるのでしょうか。
入出力があるプログラムはVC++よりVC#がおすすめということはありますか?
スレッドに取り組みたいですが、その前に上記の点を確認したいと思っております。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBAでCOPYを繰り返すと、処理が...
-
UMLでの例外処理
-
EXCEL VBA マクロ 実行する度に...
-
【Excel】特定の文字を含むセル...
-
メルカリのメルカードで買い物...
-
RPGプログラムの*HIVALについて
-
VB.NET Excelを読み込んでDataT...
-
リョウ・・・量?料?
-
月度は何て読みますか?
-
VBAでループ内で使う変数名を可...
-
「コメントアウト」と「コメン...
-
インタラクティブの反対語は?
-
ハードウェア処理とソフトウェ...
-
処理の実行中にOutLookがまとも...
-
for文の使い方
-
VBの質問#if 0 then ってどう...
-
switch の範囲指定
-
急ぎです。n88basicについての...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
【Excel】特定の文字を含むセル...
-
switch の範囲指定
-
VBAでループ内で使う変数名を可...
-
EXCEL VBA マクロ 実行する度に...
-
UMLでの例外処理
-
銀行の窓口処理の件で知ってる...
-
VBAでCOPYを繰り返すと、処理が...
-
月度は何て読みますか?
-
インタラクティブの反対語は?
-
VB.NET DataGridViewでIsNewRo...
-
DoEventsがやはり分からない
-
VBの質問#if 0 then ってどう...
-
お家デートをしててハグを長い...
-
セックスレスの既婚女性は自慰...
-
VB.NET Excelを読み込んでDataT...
-
リョウ・・・量?料?
-
メルカリのメルカードで買い物...
-
Loadイベント中にほかのイベン...
おすすめ情報