From: williamkempf_at_[hidden]
Date: 2001-09-07 08:09:32


--- In boost_at_y..., "Peter Dimov" <pdimov_at_m...> wrote:
> http://groups.yahoo.com/group/boost/files/thread_ref/
>
> contains a thread::ref prototype design and win32-based
implementation.
> Works with bcc32 5.5.1:
>
> bcc32 -tWM thread_test.cpp thread_win32.cpp
>
> and MSVC 7:
>
> cl -GX -MT thread_test.cpp thread_win32.cpp
>
> VC6 users should replace std::for_each/mem_fn with for loops.
>
> Acknowledgements: This work could not have been possible without
all the
> effort spent by Bill Kempf on Boost.Threads. Although the current
prototype
> doesn't use Boost.Threads, earlier iterations did.
>
> Here's the relevant portion of thread_test.cpp:
>
> mutex m;
>
> void printing_thread(int n)
> {
> for(;;)
> {
> thread::test_cancel();
> mutex::scoped_lock lock(m);
> std::cout << n;
> }
> }
>
> void canceling_thread(std::vector<thread::ref> v)
> {
> std::for_each(v.begin(), v.end(), boost::mem_fn
(&thread::ref::cancel));
> }
>
> int main()
> {
> std::vector<thread::ref> v;
>
> for(int i = 0; i < 8; ++i)
> {
> v.push_back(thread::create(boost::bind(printing_thread, i)));
> }
>
> thread::create(boost::bind(canceling_thread, v)).join();
>
> std::for_each(v.begin(), v.end(), boost::mem_fn
(&thread::ref::join));
>
> std::cout << '\n';
>
> return 0;
> }

I'll have a gander after the review is over and I've made the
appropriate corrections (if excepted).

Bill Kempf