Boost :: this_thread ::文字列操作なしのget_id()

私はboost :: thread :: idを変数に入れる必要がある状況ですが、この変数は文字列ではなく、文字列演算も許されません。それは可能ですか?

多分何かのような

char * tid =(何かをキャスト)boost :: this_thread :: get_id()

これはunixシステムではc ++です。 文字列操作を使用しないようにする理由は、アプリケーションの速度全体を遅くするためです。前にありがとう。

2
時期尚早の最適化はすべての悪の根源であることに注意してください。ここで文字列操作を使用すると、パフォーマンスに顕著に影響しますか?
追加された 著者 Björn Pollex,
文字列が遅いことは確かですか?あなたはそれをプロファイリングしましたか?
追加された 著者 rve,

2 答え

いずれにせよ、あなたの質問はまったく誤解に基づいているようです。 boost :: thread :: id を変数に入れるには、変数の型が boost :: thread :: id である必要があります。このような:

boost::thread::id MyVariable = boost::thread::get_id();

文字列はまったく関与していません。なぜそれを char * にキャストしようとしていますか?

あなたのスレッドがIDを取得してボトルネックになってしまうことが必要な場合、間違ったことをしている可能性があります。なぜあなたはスレッドのIDをそんなに必要としますか?

Update: Okay, so you need a thread ID that has specific semantics. You need to assign threads IDs that have the semantics you require. (There is no guarantee that whatever ID the threads already have is usable in a file name.) In pseudo-code:

  1. get_idを呼び出します。
  2. 検索したIDを地図で探します。
  3. このIDのエントリが見つかった場合は、その値を返します。完了です。
  4. このスレッドには、ファイル名に使用できるIDはありません。だから1つ割り当ててください。取得したIDとget_idから取得したIDのペアをマップに保存します。次回このスレッドのエントリを取得しようとすると、同じスレッドが取得されます。

あるいは、あなたのプラットフォームには、必要なセマンティクスを提供する関数があります。たとえば、Linuxには gettid があり、NTには GetCurrentThreadId があります。

6
追加された
私は名前がスレッドIDに基づいているtmpファイルを作成したい。したがって、基本的にtmpファイル名は TRHEADID_file.txt のようになり、IDの取得はコードの先頭で一度だけ行われます。
追加された 著者 user777305,

何について:

std::ostringstream oss;
oss << boost::thread::get_id();
std::string idAsString = oss.str();

See the documentation on boost::thread::id

更新: あなたはすでにブーストを使用しているので、使用しないでください:

std::string id = boost::lexical_cast(boost::thread::get_id());

また、あなたがこれをやっている間は、最初のスピードでしか問題にならないはずです。

4
追加された