Boost :: this_thread :: get_id () string işlemi olmadan

Bir değişkene boost :: thread :: id almam gereken bir durumda olduğum bir durumdayım, ancak bu değişken bir string DEĞİLDİR, ne string işlemine izin verilir. mümkün mü?

belki gibi bir şey

char * tid = (bir şeyleri yayınlama) desteği :: this_thread :: get_id()

Bu unix sisteminde c ++. Dize işleminden kaçınmanın nedeni, tüm uygulama hızını yavaşlatmasıdır. daha önce teşekkürler.

2
Prematüre optimizasyonun tüm kötülüklerin kökü olduğunu unutmayın. Burada bir dize işlemi kullanmanın performansınızı önemli ölçüde etkileyeceğinden emin misiniz?
katma yazar Björn Pollex, kaynak
Dizelerin yavaş olduğundan emin misin? Profil verdin mi?
katma yazar rve, kaynak

2 cevap

Her durumda, sorunuz tamamen yanlış anlaşılmaya dayanıyor gibi görünüyor. boost :: thread :: id değişkenini bir değişkene almak isterseniz, değişken boost :: thread :: id türünde olmalıdır. Bunun gibi:

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

Hiç bir dizgi yoktur. Neden bir char * 'a yayınlamaya çalışıyorsunuz?

Konularınızın kimliklerini sık sık bir darboğaz yaratması gerekiyorsa, büyük ihtimalle yanlış bir şey yapıyorsunuz demektir. Bir iş parçacığının kimliğine neden bu kadar çok ihtiyacınız var?

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’i ara.
  2. Haritada bulduğunuz kimliğe bakın.
  3. Bu kimliğe ait bir giriş bulursanız, değerini döndürürseniz işiniz biter.
  4. Bu iş parçacığının bir dosya adında kullanılabilecek kimliği yok. Öyleyse birini atayın. Get_id'den aldığınız kimliğin çiftini ve haritaya yeni atadığınız kimliği saklayın. Bu, bu iş parçacığı için bir giriş yapmayı denediğinizde, aynı şeyi alacaksınız.

Alternatif olarak, platformunuz ihtiyacınız olan semantikleri sağlayan bir fonksiyona sahip olabilir. Örneğin, Linux'ta gettid ve NT'de GetCurrentThreadId var.

6
katma
iş parçacığı kimliğine dayanan bir tmp dosyası oluşturmak istiyorum. temel olarak tmp dosya adı TRHEADID_file.txt gibi bir şey olacaktır ve kimliğin geri alınması sadece kodun başında bir kez yapılır.
katma yazar user777305, kaynak

Ne dersin:

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

See the documentation on boost::thread::id

Güncelleştirme: Zaten yükseltmeyi kullandığınızdan, neden kullanmayın:

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

Ayrıca, bunu sadece başlangıç ​​hızında yaptığınız gibi bir sorun olmamalı.

4
katma