• ベストアンサー

c++/特定オブジェクトの更新検知

c++において、 特定の変数かオブジェクトの内容に変更があるまで停止するコードを記述したいです。 sleepと内容確認を一定時間ごとに繰り返す以外に方法はありますか? 出来れば↑のループは避けて、割り込み待ちをしたいです。

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

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

Intel TBB には conditio_variable が用意されてます。

nico60000
質問者

お礼

連続で回答ありがとうございます。 感謝です。 試してみます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

近頃のWindowsなら Condition Variableが用意されています。

参考URL:
http://msdn.microsoft.com/en-us/library/ms686903.aspx
nico60000
質問者

お礼

即レス、ホントありがとうございます。 助かります。 内容確認します。

nico60000
質問者

補足

あ゜ー! 本当に最近のWindowsなんですね。 我が家XPでだめのようでした。申し訳ないです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • オブジェクトをどう更新するのが良いのか解りません。

    こんばんは、C++でのプログラミングについて質問させて頂きます。 現在DirectXライブラリを使って簡単なゲームを作っているのですが、ゲームのメインループの中で、各オブジェクトをどうやって更新するのが良いのかか解らず、アドバイスをもらえればと思い質問させて頂きました。 現在の更新方法は for(Check_Num=1;Check_Num<PL_Limit;Check_Num++) { PL_Array[Check_Num]->Action();//各オブジェクトを更新 OBJ_Array[Check_Num]->Action(); FIRE_Array[Check_Num]->Action(); } for(;Check_Num<OBJ_Limit;Check_Num++) { OBJ_Array[Check_Num]->Action(); FIRE_Array[Check_Num]->Action(); } for(;Check_Num<FIRE_Limit;Check_Num++) { FIRE_Array[Check_Num]->Action(); } Action関数には、表示を更新する、キー入力で移動する、接触したオブジェクトにダメージを与える、等といった各オブジェクトの動作が書かれています。 最初に定めたオブジェクトを生成できる上限の数まで、片っ端から全て更新していく、といった内容です。 また、オブジェクトの作成は void Player::Shoot_FireBall()//ファイアボール { FireBall* FireBall1 = new FireBall(5,Ref_x(),Ref_y(),charge,"FIREBALL",Ref_angle(),5,0,40,40,4,true,"Action/FireBall1.png",6,3,2,1.0,true,true); if(FIRE_num>=FIRE_Limit) FIRE_num = 1; FIRE_Array[FIRE_num++] = FireBall1; } といった関数を使い、特定のキーが入力された時に呼び出してオブジェクトを作成、上限に到達したら古いオブジェクトが入っていた配列を上書きして作る、といった内容です。 以上のようなソースコードを使ってやっていたのですが、このままオブジェクトの数(弾等の種類や敵の種類)が増えてくると、for文の中にその度に記述を追加していくとあまりにも長くなるような気がするのですが、この方法のままでやっていても大丈夫なのでしょうか・・? 後々効率が悪くなってくるような気がするのですが・・・、どうなのでしょうか、もし今の方法が悪いようでしたら、どう改善すれば良いのかを教えて頂ければと思います、宜しくお願いします。

  • 標準Cでのオブジェクト(変数)の定義について

    標準Cのオブジェクト(変数)の定義に「その内容によって、値を表現することができる実行環境中の記憶域の領域。ビットフィールド以外のオブジェクトは、連続する1つ以上のバイトからなる。そのバイトの個数、順序および符号化規則は、明示的に規定するかまたは処理系定義とする。 オブジェクトを参照する場合、オブジェクトは、特定の型をもっていると解釈してもよい。」とありますが、具体的に何を指しているのかが解りません。以下のように疑問点をまとめました。 1、「そのバイトの個数、順序および符号化規則は、明示的に規定するかまたは処理系定義とする。」    Int型 long型 double型等を例に取ると、「処理系定義」はそのバイト数が4バイト8バイトと考えられますが、「明示的に規定する」とは、Int型 long型 double型等で具体的にどのような定義を指しているのでしょうか? 2、「オブジェクトを参照する場合、オブジェクトは、特定の型をもっていると解釈してもよい。」とは、具体的に一体何を言いたいのか解りかねます。「参照」とは何を指しているのか?ポインタを指しているのか、「ポインタを指している」としたならなぜそれをここに書き加える必要があるのか?それとも、もっと一般的な事をいっているのか?もしもっと一般的な事を言っているならそれは何なのか? 宜しく願います。

  • エクセル2003VBA ワークシートオブジェクト名でオブジェクトを取得する記述について

    いつも勉強させていただいております。 こちらの掲示版に以下の質問の回答がとても興味を引いたので その件について、更にご質問させていただきたいと思います。 http://oshiete1.goo.ne.jp/qa3595532.html ご回答では、シートのオブジェクト名の変更のやり方等が 回答されておられました。 で、シートオブジェクト名の変更については理解できたのですが、 このオブジェクト名を用いてそのオブジェクトをどのように取得すれ ばいよのか、コードの記述の仕方がわかりません。 VBE画面でシートの表示名が Test(Sheet1)とした場合、シートオブジェクトを取得するコードは どのように記述するのでしょうか。 宜しくお願いいたします。

  • 物理シミュレーションの可視化(C#)

    C#で物理シミュレーションをしようと考えています。粒子が飛び交う様子をシミュレートし、StartやStopが可能で、粒子のパラメータなどを逐一変更できるようなものにする予定です。 で、シミュレートする部分は大体できたのですが、どのようにして画面に描画するかで悩んでいます。 C#でテトリスを作ったことがあるのですが、Threadで描画(this.Invalidate()の呼び出し)と計算(テトリミノの落下)を無限ループさせるという、かなり強引な手段で作り上げてしまいました。ループの時間間隔の調整はThread.Sleep()で、無限ループの停止、開始は外部からそのThreadをSuspend、Resumeさせることで行っていました。 こんな設計ではどこかでガタがくると思います。C#ではこういう場合、どのようにプログラムするのでしょうか? できることなら、ひな形となるようなコードを拝見したいのですが… 一例として、添付画像のようなプログラムをどのように実装するか、教えていただけますでしょうか。

  • 全てのオブジェクトのプロパティーを一気に変更する方法

    フォーム上に配置している全てのオブジェクトのプロパティを 一気に変更したいのですが、何か良い方法はありませんか? 設計段階では全て選択して一気に変更できますよね・・・ しかしながら、run状態で一気に変更する方法が見つかりません。 例として様々な名前ついたオブジェクトをコードで「Enabled=false」に変更したいのですが、この場合はやはり、ひとつのオブジェクトごとにコードを記述しなくてはならないのでしょうか。

  • eval は、どのオブジェクトにも関連付けがない?

    ・リンク先で下記のように記載されているのですが、どういう意味でしょうか? ・Webブラウザ上だと、グローバルオブジェクトである window に所属しているオブジェクトだと思うのですが? >eval はトップレベル関数であり、どのオブジェクトにも関連付けられていません https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/eval ・また、下記のような記述もあるのですが、「特定のオブジェクトを参照すること無く」とはどういう意味でしょか? >概要 >特定のオブジェクトを参照すること無く JavaScript コードの文字列を評価します。

  • objective-cの変数結合について

    毎度お世話になります。 objective-cでのループ処理を利用したオブジェクトと変数の結合方法が分からなくて質問する事にしました。 私の検索方法が悪いのか見つからなかったので・・ phpでループを利用した変数の結合をする場合だと、 for($i = 0; $i < 2; $i++){ echo "com".$i; } でcom0とcom1の表現が問題なくいけますが、 objective-cではどのようになるのでしょうか。 初級的な質問で申し訳ないのですが、どうかよろしくお願いします。

  • 【Excel_VBA】オブジェクト名の変数

    ExcelVBA(2007)でシートのオブジェクト名を変数で回したく、下記コードを用いたのですがエラーが出現します。 【コード】 Dim i As Integer For i = 1 To 10 Sheet & i.Activate Next i 【エラー内容】 コンパイルエラー: 修正候補:式 この場合、どのような方法を用いたらシートのオブジェクト名を変数でうまく回すことができるのか、ご教授いただければ助かります。 よろしくお願いします。

  • C++の文法で分からないことがあります

    C++のコードを解析しているときに分からない部分が出てきたので教えていただきたいのですが... あるクラスのメンバ関数の引数で( {オブジェクト名}*& {変数名} )とあったのですが, *& てなんでしょうか? 参照へのポインタという意味かなとは思うのですがそれはそれで意味が分からないし、これを使うことでどんなことが起こるのか分かりません。 どなたか知っている方教えてください。 あと、objective-c++のリファレンスって存在するのでしょうか?あったらどこにあるのか教えてくださると非常に助かります。 よろしくお願いします。

    • 締切済み
    • Mac
  • ExcelVBA ユーザーフォームのオブジェクト名

    ExcelVBA ユーザーフォームのオブジェクト名について質問です。 Excel2003で、あるユーザーフォームのオブジェクト名を「ユーザーフォーム表示中」とし、 ユーザーフォーム表示中.Showで表示するように記述しました。 何度かテストを済ませ、他のプログラムも含めて完成したと思ったのですが、他のPCでエラー報告があり、コードを確認したところ、なぜか、ユーザーフォーム表示.Show(中の字が消えている)になっていました。 もちろん誰かが記述を変更することは考えられません。 以前、自分のPC内でも同じようなことがあり、いくら原因を探しても見つからず、ユーザーフォームのオブジェクト名を削除された記述に合わせて対処したことがあります。 これは何が原因なのでしょうか。 文字数制限か何かあるのでしょうか。