![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_02.png?8acaa2e)
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
メルカリのメルカードで買い物...
-
レジ返品交換について(時間がか...
-
UMLでの例外処理
-
switch の範囲指定
-
【Excel】特定の文字を含むセル...
-
Loadイベント中にほかのイベン...
-
VB.NET Excelを読み込んでDataT...
-
DoEventsがやはり分からない
-
Do~Loopした回数をカウントしたい
-
EXCEL VBA マクロ 実行する度に...
-
findは動くがfindnextがマクロ...
-
VBAでセルに値が入力されるまで...
-
C言語:数値の桁数指定について...
-
C言語 b += a ? 1 : 0; の意味
-
インタラクティブの反対語は?
-
エクセルVBA マクロ処理中のポ...
-
月度は何て読みますか?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
DoEventsがやはり分からない
-
switch の範囲指定
-
メルカリのメルカードで買い物...
-
【Excel】特定の文字を含むセル...
-
VBの質問#if 0 then ってどう...
-
VBAでCOPYを繰り返すと、処理が...
-
EXCEL VBA マクロ 実行する度に...
-
findは動くがfindnextがマクロ...
-
インタラクティブの反対語は?
-
UMLでの例外処理
-
リョウ・・・量?料?
-
Do~Loopした回数をカウントしたい
-
セックスレスの既婚女性は自慰...
-
月度は何て読みますか?
-
Loadイベント中にほかのイベン...
-
セルの値が0はクリアするマクロ
-
FFTの結果ついて
おすすめ情報