Opened 9 years ago

Closed 9 years ago

#9094 closed Support Requests (invalid)

Missing boot::thread::thread(detail::thread_data_ptr data) constructor implementation for pthreads

Reported by: leonardo@… Owned by: viboes
Milestone: To Be Determined Component: thread
Version: Boost 1.54.0 Severity: Not Applicable
Keywords: thread, constructor Cc:

Description

pthread's implementation of thread.cpp missing thread::thread(detail::thread_data_ptr data) constructor implementation. I have copied implementation from win32-version of thread.cpp and all going ok:

    thread::thread(detail::thread_data_ptr data):
        thread_info(data)
    {}

Please, fix this little bug in new release if possible.

Change History (8)

comment:1 by viboes, 9 years ago

Please, could you add an example, the compiler, platform and error you are getting.

comment:2 by viboes, 9 years ago

Owner: changed from Anthony Williams to viboes
Status: newassigned

comment:3 by viboes, 9 years ago

I have commented this line on windows and everything works

explicit thread(detail::thread_data_ptr data);

It seems it is not used.

comment:4 by leonardo@…, 9 years ago

We a using boost::thread in our cross-platform code (Windows XP/Vista/7/8 and Linux Debian 7.0). Used compilers: MSVC++ v.9.0 (vs2008), GCC v.4.6.3.

On Windows platform we have no problems while building our code. On Linux (GCC v.4.6.3) we have an error while trying to link boost_thread.a library, cause it has no implementation of thread(detail::thread_data_ptr data).

This constructor is only the way to separate thread initialization from starting/stopping/restarting thread execution, for ex.:

// our wrapper-class for thread
class thread_object_t :
	public virtual thread_object_i   // thread-object interface
{
private:
	vptr_t thread_args;             // thread entry custom arguments
	boost::thread thread_impl;      // using boost::thread implementation

...

};

// init thread object, setting thread entry to thread_object_t::thread_impl_entry()
void	thread_object_t::init_thread_impl()
{
	thread_impl = boost::thread(boost::thread::make_thread_info(boost::bind(boost::type<void>(), thread_impl_entry, this)));
}

// thread start method, separated from thread initialization (with custom stack size)
void	thread_object_t::start(vptr_t new_thread_args)
{
	thread_args = new_thread_args;

	boost::thread_attributes thread_attributes;
	thread_attributes.set_stack_size(max_stack_size);
	thread_impl.start_thread(thread_attributes);
}

Please, don't remove this constructor, cause it is only the way to do things that we need (flexible controll of thread-entry, thread stack, thread execution).

Simple solution is to use one implementation of this constructor for both win32 and pthread versions:

thread::thread(detail::thread_data_ptr data):
        thread_info(data)
    {}

comment:5 by viboes, 9 years ago

Sorry, this constructor is not in the public documented interface.

Please let me know why you can not do what you want to do with the public interface, I will try to fix anything is really needed.

comment:6 by viboes, 9 years ago

Type: BugsSupport Requests

comment:7 by viboes, 9 years ago

Severity: ProblemNot Applicable

comment:8 by viboes, 9 years ago

Resolution: invalid
Status: assignedclosed

Closed as you are using details of the implementation. Please create a feature request for whatever new feature you need.

Note: See TracTickets for help on using tickets.