Boost logo

Boost :

From: larsbj_at_[hidden]
Date: 2001-06-12 14:15:32


williamkempf_at_[hidden] writes:

| Actually, Boost.Function is required to get the deferred call
| internally in create_thread(). That is, however, an implementation
| detail. As a user all you need is a binder lib.

Do I...

This work with the code in the previous mail.
It is possible that the binders I use is in reality a defer_call...
but then I really don't see the difference between defer_call and a
binder.

This code is very similar to the one I sent you some days ago.

class thread_handle {
public:
        explicit thread_handle(pthread_t p)
                : pth_(p) {}
        void join() {
                pthread_join(pth_, 0);
        }
private:
        pthread_t pth_;
};

template <typename Functor>
class ThreadArg {
public:
        ThreadArg(Functor const & functor)
        : f_(functor) {}
        static thread_handle execute(Functor const & functor) {
                ThreadArg * arg = new ThreadArg(functor);
                pthread_t pth;
                pthread_create(&pth, 0, ThreadArg::start_routine, arg);
                return thread_handle(pth);
        }
private:
        static void * start_routine(void * arg_v) {
                ThreadArg * arg = static_cast<ThreadArg*>(arg_v);
                arg->f_();
                delete arg;
        }
        Functor f_;
};

template <typename Functor>
thread_handle create_thread(Functor const & functor)
{
        return ThreadArg<Functor>::execute(functor);
}

 
| > Is there a binders lib proposed for boost that would allow me to do
| > the above?
|
| The Lambda Library will allow constructs similar to this, but with a
| richer syntax. I believe there's also a lighter weight binder
| library in the files section.

You wouldn't happen to know its name?

-- 
	Lgb

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk