1

単一のスレッドを作成できるスレッドクラスのコンストラクターを作成したいのですが、スレッドがエントリポイントで実行を開始すると戻る必要があります

エントリポイントは、実行時に渡されるクラス関数になります。派生クラス関数は変更できず、チェックできる共有変数は更新されません。

作成したpthreadが指定したエントリポイントで実行を開始することを確認するにはどうすればよいですか?

4

2 に答える 2

4

それは良い考えではありません。

基本クラスのコンストラクターが最初に実行されます。したがって、スレッドがエントリポイントに到達するまで基本クラスのコンストラクターが返されない場合、そのコンストラクターが実行されていないオブジェクト内でスレッドが実行されています。したがって、完全に開始されていません。

エントリポイントが派生型で定義されている仮想メソッドである場合は、未定義の動作を確実に呼び出しています。

これが、ほとんどのスレッドクラスがこのように設計されていない理由でもあります。通常、スレッドオブジェクトを作成します。次にstart()、パラメータとして渡された関数/メソッドまたは実行可能オブジェクトを実行するようなメソッドを呼び出します。このようにして、スレッドを表すオブジェクトが完全に構築され、すべてのメンバーが正しく初期化されていることがわかります。

于 2012-10-24T20:20:29.510 に答える
0

これを行うには、たとえばバリアなどの同期プリミティブを使用する必要があります。取得したエントリポイントを、この同期プリミティブに信号を送り、そのベースエントリポイントを呼び出す別のエントリポイントでラップするだけです。

あなたが達成しようとしていることの実際のコードを見ずに言うことができることはそれほど多くありません。

于 2012-10-24T20:14:36.610 に答える