• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C++ バックグランド処理中に入出力できない)

C++バックグランド処理中に入出力できない

このQ&Aのポイント
  • C++プログラムでは、バックグランドでの処理中に入出力ができません。
  • 例えば、Formウィンドウに計算の進行状況を表示する場合、途中では更新されず、計算が終了した時に更新されます。
  • 一方、C#では簡単にバックグランド処理中に入出力ができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.5

ちと遅い気もしますが。 (1) フォームへの入力もイベントとして扱われますから、イベント入力待ち状態に戻れば問題なく入力可能になります。 (2) C#が簡単というよりも、C++/CLIがVB.NETやC#と比べて言語レベルでややこしいと言う方が正確なところです。 ただしC#でもスレッドは必要なので、スレッドを使うのが面倒というならDoEventsが使えるVB.NETの方がC#よりも楽でしょう。

atmasise
質問者

お礼

D-Matsuさん、ご回答ありがとうございます。 メッセージキュー、メッセージループの仕組みから、 入出力のウィンドウがフリーズすることが理解できました。 VBには、DoEventsという便利なのもがあり、C++にはないことも分かりました。 http://dobon.net/vb/dotnet/vb6/doevents.html ここを見ると、C#もDoEventsできるようですね。

その他の回答 (4)

  • ___goo
  • ベストアンサー率50% (2/4)
回答No.4

C++Builderであれば Application->ProcessMessages() でメッセージキューにあるメッセージを処理することで、表示を更新できます。

atmasise
質問者

お礼

回答ありがとうございます。No.1への返信でまとめて返事しています。

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.3

おそらくフォームのボタンを押した際などの処理と思われますが、イベント処理中は他のイベントを基本的にブロックする、つまり画面更新もされないのでそーゆー事になります。 該当の処理をイベントに依らないスレッドで処理するか、明示的に「イベントを処理する」という事を行う必要があります。 http://dobon.net/vb/dotnet/vb6/doevents.html

atmasise
質問者

お礼

回答ありがとうございます。No.1への返信でまとめて返事しています。

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

C++/CLIでプログレスバーを出すということなら、検索すれば http://d.hatena.ne.jp/ekiryu/20090724/p1 などの例がありますが。

atmasise
質問者

お礼

回答ありがとうございます。No.1への返信でまとめて返事しています。

回答No.1

> Basicでしたら、バックグランドで処理を常に続けながら、 > Formウィンドウで入力を受け付けたり、ウィンドウ表示を最新に更新させることが、 > 簡単にできたと思いますが、それが、C++ではできません。 できますよ。スレッド起こすとか(C++/CLIなら)BackgroundWorker立てるとか。

atmasise
質問者

お礼

epistemeさん、nora1962さん、D-Matsuさん、___gooさん 回答ありがとうございます。 すみません、基本的な情報が抜けていました。 「Visual C++ 2008 express edition」を使用しています。 D-Matsuさんのおっしゃるとおり、「フォームのボタンを押したときの処理」です。 「スレッド」でやるべきということはなんとなく分かりました。 そこで、 (1)スレッドを使えば、処理中に、表示更新だけでなく、  フォーム空欄への入力も受け付けられるのでしょうか。 (2)Visual C#を使えば、スレッドなど使わずに、簡単に実現できるのでしょうか。  入出力があるプログラムはVC++よりVC#がおすすめということはありますか? スレッドに取り組みたいですが、その前に上記の点を確認したいと思っております。

関連するQ&A