none
プログラムカウンタ指定による任意の処理への移動について RRS feed

  • 質問

  • Whileループ等の無限ループ時に陥った際に、プログラムカウンタで任意の処理に推移(無限ループから脱出)させたいのですが、実現方法をご存知の方おられますでしょうか?

    2016年11月28日 0:23

すべての返信

  • 言語が明示されていませんが、Visual C++フォーラムということですのでC++言語と仮定して回答します。C言語やその他の言語を想定されているのであれば、質問文に明記すべきです。

    まず、Visual C++がメインとするWindows環境で使われるIntelプロセッサーでは「プログラムカウンター」という名称ではなく「IP; インストラクションポインター」と呼びます。その上で、C++言語ではRAII; リソースの確保は初期化時にの概念があり、強制的にループ脱出することは想定されていません(ループ脱出するのであればループ内のリソースを解放する必要があるため)。

    あらゆる状態が不正になっても構わない、ということであれば、別スレッドからstd::terminate()等でプロセスを終了してしまえばよいです。

    個人的には無限ループに陥らないようプログラムを記述するのが開発者の責務と考えます。

    2016年11月28日 0:55
  • アプリケーションを構成するときの一般的なテクニックとして、
    制御不能に陥る可能性があり、かつ、主たる処理の実行の妨げになるような無限ループを含む処理は、別スレッドに分離します。
    通信の受信処理などに良く利用される手法です。
    2016年11月28日 1:32