• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:無限ループと誤認される?[VC++2008])

VC++2008でのプログラム実行で止まる問題について

Yanchの回答

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.4

Windows アプリケーションなら、長時間メッセージループを処理しないと、アプリケーションが無限ループに入った、もしくは暴走していると判断されかねません。 時間の掛かる処理をしている間も、メッセージループを処理する様に実装しましょう。 コンソールアプリケーションなら、この回答は無視してください。

関連するQ&A

  • 無限ループ

    今のプログラムが無限ループになる。しかも乱数を使っているので9割以上は正常で1割未満の確率で無限ループになるようです。 netbeans5.5でアプレットで実行は「ファイルを実行」(shift-F6)でやっています。なんとか無限ループになっている箇所を探す方法を教えてください。

  • 無限ループに陥ります

    プログラム中の以下の部分で無限ループに陥ってしまいます while(*a != EOF){ *a = fgetc(fi); if(*a == 32){ b++; } if(b == 3){ b = 0; t = *(a-1); if(t == '1'|| t == '3' ||t == '5' || t == '7'|| t == '9'){ c[n] = 1; } else{ c[n] = 2; } n++; } } fiに読み込んでいるファイルの末尾はこんな感じです。 50 49 0 34 34 34 34 34 34 34 34 34 34 34 34 50 49 0 68 68 68 51 51 50 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 [EOF] どなたか分かる方お願いします。

  • 無限ループをわざと作って時計をつくりたい

    無限ループをわざと作って時計を作ろうと思っています。 while(true){ 処理 } とすると無限ループを作ることができると書いてありましたので private void btnRedActionPerformed(java.awt.event.ActionEvent evt) { while(true) { taOutput.setText(""); Date d = new Date(); taOutput.append(d +":" ); Color c = new Color(102,255,255); taOutput.setBackground(c); Font f = new Font(Font.SERIF, Font.ITALIC, 25); taOutput.setFont(f);  } } として実行してボタンを押すと処理が止まって固まってしまうのです。 出力画面にOutOfMemoryErrorと書いてあるのでそのへんの理由だと思うのですが。 ちなみに for (int i = 0; i<5; i++) { } でテストするとうまく動きます。 これを固まらせずにうまく無限ループを続けさせるにはどうしたらいいのでしょうか。

    • ベストアンサー
    • Java
  • 無限ループで出力ストリームが表示されないのはなぜですか?

    次のソースコードをVC++で実行したところ、入力の表示ができませんでした。 でも、無限ループを削除すると、正常に表示されます。 非常に基本的な質問かもしれませんが、理由がわかりません。 ご存知でしたら教えてください。よろしくお願い致します。 #include <iostream.h> int main() { char ss[80]; cout << "何か入力してください:"; cin >> ss; cout << "入力したのは[" << ss << "]です\n"; for(;;) { } }

  • VC++ メインループでのイベント監視方法

    こんにちは。 VC++2008Expressでプログラムをしようと思っている初心者です。 以下、変な疑問があり、お尋ねしたいと思います。 よろしくお願いします。 Windowsアプリケーション Win32API クラスで別スレッドを作成して、そのスレッドからのイベントを WinMainループで受け取る方法ですが 通常皆様はどういう風にするのでしょうか? クラスは、その他のプログラムでも流用可能で様々なアプリに対応しやすいようにしあげたいのですが。。 別スレッドでイベント発生時にWinMainにどのように教えるのが普通のやり方なんでしょうか? 僕の考えでは、WinMain関数内のループ内で常時イベント発生していないか 以下のように監視させるか eventloop el; while(GetMessage(&msg,NULL,0,0)) {   TranslateMessage(&msg);   DispatchMessage(&msg);      if(el::boolEvent){     イベント処理へ   } } とするのが良いか? これだとクラスの関数、変数の使い方さえ分かるようにしておけば流用は簡単 なのかなと思いますが。。 メインのループ内にこんな監視を入れるようなプログラムをみたことないので ナンセンスなのではと思います。 次に考えられるのは、クラスのイベント発生で作成したSendMessageを送って メッセージ処理でイベント処理をさせるのが良いのかなって思いますが これだと、流用するときに対応したMessage(キュー?ですかね)を作成しないといけなく 私的に分かりにくいなーって思います。。。 変なことで悩んで先に進まないのですが、皆様はどのようにコーディングされるのでしょうか? ちなみにイベントというのは、RS232Cで受信があって、そのデータを加工したあとで メモリに格納して格納しましたよってイベントです。 どうかよろしくお願いします。

  • windowsフォームアプリケーションについて

    windowsフォームアプリケーションについて 現在VC++のwindowsフォームアプリケーションを使ってマウスのみで作業ができる環境を作ろうとしてます。 その際に他のプログラムで作成した実行ファイルを外部アプリケーションとして system("C:\\~~\\--.exe") で表示させることに成功しました。 しかしこの実行ファイル(VC++で作成)はwhileループを用いているため途中で終了させることはできない仕組みになっています。 そこでこのwhileループを用いた実行ファイルをwindowsフォームアプリケーションのボタンクリックしたら終了するようなプログラムを作成したいのですがネットなどで調べてもコマンドが分からずに困っています。 アドバイスいただける方よろしくお願いします。

  • VC6.0++でDXライブラリが上手くいかない!

    Windows10で家に昔買った VC6.0++があったのでインストールして DXライブラリのプログラムコードを入力して 実行してみたのですが、 VC6.0++上のビルドでは画像を表示するプログラムなら画像が表示されるし 音を鳴らすプログラムなら音がなるんですが、 作成したexeファイルを実行した場合、プログラムが実行されません なぜでしょうか? 何が悪いのでしょうか? 教えてくださいよろしくお願いします。

  • DOSコマンドでの単純なループ処理

    DOSコマンドで単純なループ処理を記述する方法を教えて下さい。 UNIXで下記のようにwhileコマンドを使用すると、 /export% While(1) ? ループ処理で実行させたいコマンドを記述 ? echo "" ? sleep 3 3秒おきにコマンドの標準出力が表示されます。 Windowsで同じようなことができたらいいなと 思うのですが、簡単な方法を知っている方がいたら 教えて下さい。

  • 無限ループからの脱出

    import java.io.*; public class Test { public static void main(String[] args) throws IOException { String ss; int idt; while(true) { try { BufferedReader f = new BufferedReader(new InputStreamReader(System.in)); System.out.print("数字を入力してください : "); ss = f.readLine(); if(ss == "end") break; idt = Integer.parseInt(ss); System.out.println("あなたの入力した数字は " + idt + " です。"); System.out.println(); } catch(NumberFormatException e) { System.out.println("error : " + e); System.out.println(); } } } } 上記は、コンソールに入力した数字をそのまま出力し、数字以外を入力すると例外処理するプログラムです。 見ていただくと分かるとおり、途中入力したものが「end」だとbreakして無限ループを脱出するということを予定して作りました。 しかしbreakしてくれません。if文の中に処理が移っていないのです。なぜでしょうか? 宜しくお願いします。

    • ベストアンサー
    • Java
  • マルチスレッド内のループについて

    こんにちは。 開発環境は VC++6.0 SDI マルチスレッドがあり、2つの処理を行う関数が書かれています。 このスレッドはダイアログボックスに配置したストップボタンを押すとフラグFALSEになりループを終了させます。 2つの関数は、int型の整数を引数にして、処理を行います。 整数はある値に達すると 0 になり永遠にループを続け、2つの処理を行います。 と言う意味合いでプログラムを書きました。(書いたつもりです) (1)この書き方ですと、for内のループが動いている時に、右上の×ボタンでダイアログを閉じると [Debug Assertion Failed!]と言う警告文が出て強制的に終了してしまいます。 ストップボタンを押してもcount=10になるまではループしています。(当然ですが・・。) そもそもマルチスレッドの中にこのような形でfor文を入れるのは間違っているのでしょうか? どのような書き方にすれば良いのでしょうか? よろしくお願い致します。 bool m_flags;//スレッド内の処理を続けるか示すフラグ UINT CabcDlg::thread(LPVOID pParam)// { CabcDlg *pInst = (CabcDlg *) pParam; while(pInst->m_flags){//ストップボタンが押されると終了する。 for (int count = 0; count<10; count++ ) { pInst->OnSend(count); //処理A pInst->OnReceive(count);//処理B } } return 0; }