Boost :: this_thread :: get_id () без операції string

я в ситуації, коли мені потрібно отримати boost :: thread :: id в змінну, але ця змінна НЕ це рядок, а операція string не допускається. це можливо?

може бути щось на зразок

char * tid = (casting something) boost :: this_thread :: get_id()

це c ++ на unix-системі. причина, чому уникати використання операцій струни, це тим самим сповільнює всю швидкість програми. спасибі раніше.

2
Пам'ятайте, що передчасна оптимізація є корінням всього зла. Ви впевнені, що використання строкової операції тут суттєво вплине на вашу продуктивність?
додано Автор Björn Pollex, джерело
Ви впевнені, що рядки повільні? Ви його прорекламували?
додано Автор rve, джерело

2 Відповіді

У будь-якому випадку ваше запитання, здається, цілком грунтується на неправильному розумінні. Якщо ви хочете отримати 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:

  1. Зателефонуйте get_id.
  2. Знайдіть ідентифікатор, який ви отримали на карті.
  3. Якщо ви знайшли запис для цього ідентифікатора, поверніть його значення, ви завершите.
  4. Ця нитка не має ідентифікатора, який можна використовувати в назві файлу. Тому призначте його. Зберігайте пару ідентифікатора, отриманого вами від get_id, та ідентифікатора, який ви тільки що призначили на карті. Це гарантує, що наступного разу, коли ви намагаєтеся отримати запис для цієї теми, ви отримаєте таку саму.

Крім того, ваша платформа може мати функцію, яка забезпечує семантику, яка вам потрібна. Наприклад, Linux має gettid , а NT має GetCurrentThreadId .

6
додано
Я хочу створити файл tmp, назва якого заснований на ідентифікаторі потоку. так що в основному ім'я файлу tmp буде щось на кшталт TRHEADID_file.txt , і витяг ідентифікатора виконується лише один раз, на початку коду.
додано Автор 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
додано
IT KPI C/С++ новым годом
IT KPI C/С++ новым годом
747 учасників

Чат обсуждения С/С++. - Вопросы "напишите за меня лабу" - это оффтоп. - Оффтоп, флуд, оскорбления и вбросы здесь не приняты. - За нарушение - предупреждение или mute на неделю. - За спам и рекламу - ban. Все чаты IT KPI: https://t.me/itkpi/1147