The code is trying to convert a pthread_t to an int (to create a
unique ID).
Now, since under both SPT and PUT models, pthread_t is a structure,
this cast is failing (for the obvious reasons).
Does anyone have any ideas as how to deal with this ? Are any of the
three fields in pthread_handle_t unique and invariant on a per-thread
basis, so that I can use that field to convert to int?
Thanks.
I know what you mean. I found this piece of code that may help, just
adapt it for your particular need. It is taken from ACE_wrappers code
/**
* @file tid_to_int.h
*
* $Id: tid_to_int.h 79902 2007-10-31 09:46:36Z johnnyw $
*
* Convert an ACE_thread_t to an integer in a way that doesn't rely
* heavily on platform-specific configuration.
*
* @author Ossama Othman
*/
namespace
{
template<typename thread_id_type, typename ace_thread_id_type>
struct ACE_thread_t_to_integer_i
{
thread_id_type operator() (ace_thread_id_type tid)
{
// We assume sizeof(thread_id_type) >=
sizeof(ace_thread_id_type).
return (thread_id_type) (tid);
}
};
template<typename thread_id_type, typename ace_thread_id_type>
struct ACE_thread_t_to_integer_i<thread_id_type,
ace_thread_id_type*>
{
thread_id_type operator() (ace_thread_id_type* tid)
{
// ACE_thread_t is a pointer. Cast to an intermediate integer
// type large enough to hold a pointer.
#if defined (ACE_OPENVMS) && (!defined (__INITIAL_POINTER_SIZE) ||
(__INITIAL_POINTER_SIZE < 64))
int const tmp = reinterpret_cast<int> (tid);
#else
intptr_t const tmp = reinterpret_cast<intptr_t> (tid);
#endif
// We assume sizeof(thread_id_type) >=
sizeof(ace_thread_id_type).
return (thread_id_type) tmp;
}
};
template<typename thread_id_type>
thread_id_type
ACE_thread_t_to_integer (ACE_thread_t tid)
{
return ACE_thread_t_to_integer_i<thread_id_type, ACE_thread_t>()
(tid);
}
}
good luck,
Daniel.
Thanks. Unfortunately, I'm dealing with raw pthread_t, which is
defined as a 3 element struct (pointer, short, short).
I appreciate the help, though.