Слишком поздно, но для пользователей, которые ищут ответ, boost позволяет обращаться к идентификатору потока, как вы сказали, просто вызывая следующий метод:
boost::this_thread::get_id()
Этот метод возвращает внутренний идентификатор типа из boost, который не является числовым, как вы хотите. Но вы можете легко преобразовать это число, например, в беззнаковое длинное с учетом того, что идентификатор имеет шестнадцатеричное представление. Эта маленькая функция сделает де Иов:
#include <boost/lexical_cast.hpp>
#include <boost/thread.hpp>
unsigned long getThreadId(){
std::string threadId = boost::lexical_cast<std::string>(boost::this_thread::get_id());
unsigned long threadNumber = 0;
sscanf(threadId.c_str(), "%lx", &threadNumber);
return threadNumber;
}
void drawThreadId(){
std::cout << getThreadId() << std::endl;
boost::this_thread::sleep(boost::posix_time::milliseconds(500));
}
int main() {
for(int i=0; i<10; i++){
boost::thread thread = boost::thread(drawThreadId);
}
return 0;
}
Это вернет что-то вроде этого:
4491075584
4491612160
4492148736
4492685312
4493221888
4493758464
4494295040
4494831616
4495368192
4495904768
Не забудьте ссылку с boost_thread и boost_system.
Надеюсь, это поможет!