Если вы просматриваете всю документацию Boost Thread (http://www.boost.org/doc/libs/release/doc/html/thread.html, или http://www.boost.org/doc/libs/1_60_0/doc/html/thread.html, если эта первая ссылка не работает), вы обнаружите, что нет предусмотрена функция для получения указателя на объект boost::thread
, представляющий текущий поток.
Вы можете решить эту проблему самостоятельно, однако; Одним из решений будет использование карты, сопоставление boost::thread:id
s с boost:thread*
s, а затем доступ к этой карте из вашего потока, чтобы получить указатель.
Например:
#include <cstdio>
#include <map>
#include <boost/thread/thread.hpp>
#include <boost/thread/mutex.hpp>
std::map<boost::thread::id, boost::thread*> threadsMap;
boost::mutex threadsMapMutex; // to synchronize access to the map
boost::mutex stdoutMutex; // to synchronize access to stdout
void thread_function()
{
threadsMapMutex.lock();
// get a pointer to this thread
boost::thread::id id = boost::this_thread::get_id();
boost::thread* thisThread = threadsMap.find(id)->second;
threadsMapMutex.unlock();
// do whatever it is that you need to do with the pointer
if(thisThread != NULL)
{
stdoutMutex.lock();
printf("I have a pointer to my own thread!\n");
stdoutMutex.unlock();
}
}
int main()
{
threadsMapMutex.lock();
// create the threads
boost::thread thread1(&thread_function);
boost::thread thread2(&thread_function);
// insert the threads into the map
threadsMap.insert(std::pair<boost::thread::id, boost::thread*>(thread1.get_id(), &thread1));
threadsMap.insert(std::pair<boost::thread::id, boost::thread*>(thread2.get_id(), &thread2));
threadsMapMutex.unlock();
// join the threads
thread1.join();
thread2.join();
return 0;
}
P.S. Я только что заметил, что вы опубликовали в комментарии , что вы на самом деле используете это решение, после того, как уже написали это. Ну что ж, я все еще считаю полезным и полным официально опубликовать ответ на ваш вопрос, а также (рабочий) пример кода для потенциального решения.