Boost logo

Boost :

From: Kevlin Henney (kevlin_at_[hidden])
Date: 2005-05-10 03:53:53


In message
<435B34B617D19D40977CBB72A9C3463804CFF8F2_at_RED-MSG-53.redmond.corp.microso
ft.com>, Jon Kalb <jonkalb_at_[hidden]> writes
>
>> And usage as follows:
>>
>> void void_task();
>> int int_task();
>> ...
>> joiner<void> wait_for_completion = thread(void_task);
>> joiner<int> wait_for_value = thread(int_task);
>> ...
>> int result = wait_for_value();
>> wait_for_completion();
>
>In the code snippet above does the line "int result = wait_for_value();"
>block until the completion of the thread? (It must or there is no way of
>knowing if the value of result is valid.) Is there a way for the client
>to avoid the block by checking whether or not thread is completed so
>that the call won't block... Some sort of wait_for_value.is_done()?

Yes, the simple check to allow non-blocking behaviour is expressed as a
Boolean conversion, ie

        if(wait_for_value)
        {
                int result = wait_for_value();
                ... // do something with result now thread has completed
        }
        else
        {
                ... // do something else instead
        }

This ability to query availability is a typical feature of future
variables.

Kevlin

-- 
____________________________________________________________
  Kevlin Henney                   phone:  +44 117 942 2990
  mailto:kevlin_at_[hidden]     mobile: +44 7801 073 508
  http://www.curbralan.com        fax:    +44 870 052 2289
  Curbralan: Consultancy + Training + Development + Review
____________________________________________________________

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