0

私はブースト スレッドを使用しており、対応するスレッド ID を使用してマップに格納できるように、スレッド関数からスレッドを参照する必要があります。主なアイデアは、別のスレッドを使用して proc テーブルにクエリを実行してスレッドの統計を収集することなので、boost::this_thread::get_id(). 特定のスレッドで割り込みと結合を呼び出すことができるように、スレッドを保存する必要があります。

次の挿入ステートメントは機能しませんが、this または &this がスレッドを参照すると予想していました。

スレッド機能:

workerFunc(){
    std::string tid;
    tid=boost::lexical_cast<string>(syscall(SYS_gettid));
    threadMap.insert(pair<std::string,boost::thread>(tid,this));
} 

現在、親に挿入を行わせていますが、スレッドがスレッド ID を取得するのを待ちますが、それは望んでいません。

親を使用せずにスレッド/スレッドへのポインターを保存するにはどうすればよいですか?

4

2 に答える 2

1

関数の代わりにファンクターを使用すると、それに状態を追加できます。

于 2012-09-13T14:52:00.087 に答える
0

いいえ、のコンストラクターthreadに渡す関数 (またはファンクター) に object を直接渡すことはできません。thread「卵かニワトリか」という感じです。

このマップを満たすエンティティは、これらのスレッド オブジェクトを作成するマネージャーです。そして、なぜ「スレッドがスレッドIDを取得するのを待つ」必要があるのですか? ドキュメントにはそのような要件はありません- get_id()「実行のスレッド」、つまり detached 以外に適用されthreadます。

于 2012-09-13T15:30:10.530 に答える