• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C++builderにおけるwhile()の使い方)

C++builderでのwhile()の使い方

このQ&Aのポイント
  • C++ Builderにおけるwhile()を使用する方法について説明します。
  • Borland C++ Builderでプログラムを作成している際に、ボタンを押した際に無限ループのwhile()に入るようにしたい場合、どのように実装するかについて質問です。
  • 複数のボタンを作成して、それぞれに対応するwhile()を実行したいが、一部のボタンしか動かない問題について質問です。これをマルチスレッドで実現する方法を教えてください。

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

  • ベストアンサー
noname#118114
noname#118114
回答No.2

タイマの中にさらにタイマカウントを設けるのが良いでしょう。 タイマのインターバルを1000(1秒)にしておき タイマイベントで+1していき タイマカウントが一定値に達すると必要な処理を行い、タイマカウントを0に戻すとすれば大丈夫です。 こうすれば1秒ごとのカウントを取得でき、尚且つインターバルを動的に変更できます。 構造的には #pragma resource "*.dfm" TMain *Main; int TimeCount1; //タイマカウント1 //--------------------------------------------------------------------------- __fastcall TMain::TMain(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- //作成時 void __fastcall TMain::FormCreate(TObject *Sender) { TimeCount1 = 0; } //--------------------------------------------------------------------------- ・ ・ ・ //タイマ void __fastcall TMain::Timer1Timer(TObject *Sender) { TimeCount1++; if(カウンタ値 > TimeCount1) return; TimeCount1 = 0; ・ ・ ・ } //--------------------------------------------------------------------------- と言った感じにすれば良いです。 カウンタ値には処理を開始するまでの秒数を設定してください。

daniel
質問者

お礼

ありがとうございます.これでうまくいきそうです.またいろいろ応用できそうです.

その他の回答 (1)

noname#118114
noname#118114
回答No.1

Application->ProcessMessageは割り込みを処理なんで同時に複数のイベントは動いてくれません。 複数の無限ループをやりたいならタイマーイベントを複数使った方がずっと安全です。 初期状態でEnabledをfalseにしておいて、ボタンを押したらtrueに変更すれば良いでだけです。

daniel
質問者

補足

お答えいただきありがとうございます. ProcessMessageでだめな理由がわかりました. タイマーイベントについてなんですが、タイマーがカウントしている秒数を取得することは可能なのでしょうか. また、インターバルを動的に変えてしまうと、一回一回、0からカウントしてしまうようです.なので頻繁にインターバルの値を変えてしまうプログラムを作ってしまうと、永遠とオンタイマーイベントが発生しないという状況に陥ってしまいます.何とかならないのでしょうか?

関連するQ&A