0

関数への C++ ポインターについて質問があります。

私のアーキテクチャには、Module AModule B、およびModule Cの 3 つのモジュールがあります。

モジュール B と C は、モジュール A によって作成されます。

モジュール B には、すべてのモジュールを停止するタイミングを決定するロジックがあります。

これを行うには、モジュール A が関数へのポインターをモジュール B に渡すことができると考えました。この関数では、モジュール A はモジュール B、C、次に自分自身を停止します。これらのモジュールには pthread があります。

これは良い選択かもしれないと思いますか?

私は次の手順に従いました:

  • フォーム A に stop メソッドを作成しました。
  • モジュールBでは、すべてのモジュールを停止するように配置すると、ポインターとして渡された関数を呼び出します。

フォーム B のコンストラクターで関数ポインターを渡すにはどうすればよいですか?

4

1 に答える 1

1

アイデアは正しいように聞こえますが、ギアボックスが必要になります。

シナリオを実行してみましょう:

B は A::StopAll() を呼び出します A::StopAll() は、モジュールを kill したこの関数で返すモジュール B を kill します。

これは、「停止」が何らかの論理的なことを意味し、関数をそのまま維持し、呼び出し元が何にも触れないようにする場合に機能する可能性があります。しかし、それが b.DLL のアンロードのようなものである場合、問題が発生します。

スレッドがどのように再生されるかは不明ですが、同様の問題が発生する可能性があります。

メッセージポンプがある場合、B からトリガーされた関数は、メッセージをそれ自体に投稿し、B で呼び出しを終了できるように終了する必要があります。その後、メッセージの実行は、強制終了のみを開始します。メッセージ ポンプの代わりに複数のスレッドがある場合は、別のスレッドにアラートを送信する必要がある場合があります。

于 2013-06-25T22:21:44.457 に答える