|
Boost : |
From: vicente.botet (vicente.botet_at_[hidden])
Date: 2008-06-19 18:01:30
Hello,
Boost.thread has already a non portable interface to get the thread handle
class thread {
public:
...
typedef np_native_handle_type native_handle_type;
native_handle_type native_handle();
...
};
Boost.Thread do not allow to pass thread attributes on the thread
constructor. I supose that this is due to portable issues. Could we
identifiy which attributes are portable and which one not?
The portable attributes (as stack size, ...) can be grouped on a
thread_attributes class.
In order to be able to pass whatever attribute to the thread constructor we
can add the setting of non portable attributes to this thread_attributes
class, and making the thread constructor take a thread_attributes in
addition to the existing parameters.
class thread {
public:
class thread_attributes {
// portable attributes
public:
// set/get of attributes
// ..
#if defined(BOOST_THREAD_PLATFORM_WIN32)
// ... window version
#elif defined(BOOST_THREAD_PLATFORM_PTHREAD)
private:
pthread_attr_t native_attributes;
public:
set_np_attributes(const pthread_attr_t* h);
// ... other
#else
#error "Boost threads unavailable on this platform"
#endif
};
thread(const thread_attributes*p, F f,A1 a1);
...
};
The portable application needing some specific configuration can construct
portable threads using the following schema
thread::thread_attributes attr;
// set portable attributes
// ...
#if defined(BOOST_THREAD_PLATFORM_WIN32)
// ... window version
#elif defined(BOOST_THREAD_PLATFORM_PTHREAD)
// ... pthread version
pthread_attr_t native_attributes;
pthread_attr_init(&native_attributes);
pthread_attr_setstacksize(&native_attributes, 1000000);
attr.set_np_attributes(&native_attributes);
#else
#error "Boost threads unavailable on this platform"
#endif
thread th(attr, f,ctx);
What do you think?
Vicente
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk