Boost :: this_thread :: get_id () ishlamaydi

men o'zgaruvchiga aylantirmoq kerak bo'lgan vaziyatda bo'laman: lekin bu o'zgaruvchi mag'lubiyat emas, mag'lubiyatga ruxsat berilmaydi. mumkinmi?

Ehtimol, bir narsa

char * tid = (biror narsalar cast) boost :: this_thread :: get_id()

bu c ++ ning unix tizimida. mag'lubiyatni ishlatishdan qochishning sababi barcha dastur tezligini sekinlashtiradi. oldin rahmat.

2
Unutmangki, erta optimallashtirish barcha yovuzliklarning ildizidir. Bu erda mag'lubiyatni ishlatish sizning ishingizga ta'sir ko'rsatishi mumkinligiga ishonchingiz komilmi?
qo'shib qo'ydi muallif Björn Pollex, manba
Ishonchli simlar sekinmi? Siz profilni qo'ydingizmi?
qo'shib qo'ydi muallif rve, manba

2 javoblar

Har holda, sizning savolingiz butunlay noto'g'ri tushunchaga asoslangan ko'rinadi. Agar boost :: thread :: id ni o'zgarmaydigan qilib olishni istasangiz, o'zgaruvchi boost :: thread :: id turidagi bo'lishi kerak. Shunga o'xshash:

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

Hech qanday satr mavjud emas. Nima uchun uni char * ga ko'chirmoqchisiz?

Agar sizning muammolaringiz shunchalik tez-tez yuz berishi kerak bo'lsa, bu sizning muammoingizni keltirib chiqarishi mumkin. Nima uchun sizning thread identifikatoriga juda kerak?

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_idga qo'ng'iroq qiling.
  2. Xaritada olingan identifikatorni toping.
  3. Agar ushbu ID uchun ariza topsangiz, uning qiymatini qaytaring, tugallang.
  4. Ushbu ishlov berishda fayl nomida ishlatilishi mumkin bo'lgan identifikator yo'q. Bas, uni bir qo'y. Get_id dan olingan ID identifikatorini va xaritada siz tayinlagan identifikatorni saqlang. Bu siz keyingi safar bu ish uchun kirishni olishga harakat qilsangiz, siz ham xuddi shunday bo'ladi.

Shu bilan bir qatorda, platformangizda kerak bo'lgan semantikani ta'minlovchi funksiya bo'lishi mumkin. Masalan, Linuxda gettid va GetCurrentThreadId bor.

6
qo'shib qo'ydi
Tmf faylini yaratmoqchiman, unda nomning identifikatoriga asoslanadi. shuning uchun asosan tmp fayli nomi TRHEADID_file.txt kabi bo'ladi va idni olish faqat bir marta, kodning boshida amalga oshiriladi.
qo'shib qo'ydi muallif user777305, manba

Nima haqida:

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

See the documentation on boost::thread::id

Yangilash: Boostdan foydalanganingizdan beri nima uchun foydalanmang:

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

Bundan tashqari, buni faqat boshlang'ich tezligida qilsangiz, muammo bo'lmaydi.

4
qo'shib qo'ydi