いずれにせよ、あなたの質問はまったく誤解に基づいているようです。 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:
- get_idを呼び出します。
- 検索したIDを地図で探します。
- このIDのエントリが見つかった場合は、その値を返します。完了です。
- このスレッドには、ファイル名に使用できるIDはありません。だから1つ割り当ててください。取得したIDとget_idから取得したIDのペアをマップに保存します。次回このスレッドのエントリを取得しようとすると、同じスレッドが取得されます。
あるいは、あなたのプラットフォームには、必要なセマンティクスを提供する関数があります。たとえば、Linuxには gettid
があり、NTには GetCurrentThreadId
があります。