У будь-якому випадку ваше запитання, здається, цілком грунтується на неправильному розумінні. Якщо ви хочете отримати boost :: thread :: id
в змінну, змінна повинна мати тип boost :: thread :: id
. Подобається це:
boost::thread::id MyVariable = boost::thread::get_id();
Ніяких рядків взагалі не беруть. Чому ви намагаєтесь передати його char *
?
Якщо вашим потокам потрібно часто отримувати свої ідентифікатори, що це створює вузьке місце, ви, ймовірно, робите щось жахливо неправильне. Чому вам потрібен ідентифікатор потоку так багато?
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.
- Знайдіть ідентифікатор, який ви отримали на карті.
- Якщо ви знайшли запис для цього ідентифікатора, поверніть його значення, ви завершите.
- Ця нитка не має ідентифікатора, який можна використовувати в назві файлу. Тому призначте його. Зберігайте пару ідентифікатора, отриманого вами від get_id, та ідентифікатора, який ви тільки що призначили на карті. Це гарантує, що наступного разу, коли ви намагаєтеся отримати запис для цієї теми, ви отримаєте таку саму.
Крім того, ваша платформа може мати функцію, яка забезпечує семантику, яка вам потрібна. Наприклад, Linux має gettid
, а NT має GetCurrentThreadId
.