Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::promis...thread_exit(3)  C++ Standard Libary std::promis...thread_exit(3)

NAME
       std::promise::set_value_at_thread_exit				     -
       std::promise::set_value_at_thread_exit

Synopsis
	  Main template
	  void set_value_at_thread_exit( const R& value	); (1) (since C++11)
	  void set_value_at_thread_exit( R&& value );	   (2) (since C++11)
	  std::promise<R&> specializations
	  void set_value_at_thread_exit( R& value );	   (3) (since C++11)
	  std::promise<void> specialization
	  void set_value_at_thread_exit();		   (4) (since C++11)

	  Stores the value into	the shared  state  without  making  the	 state
       ready immediately.
	  The  state  is  made	ready when the current thread exits, after all
       variables with
	  thread-local storage duration	have been destroyed.

	  The  operation   behaves   as	  though   set_value,	set_exception,
       set_value_at_thread_exit,
	  and  set_exception_at_thread_exit  acquire a single mutex associated
       with the	promise
	  object while updating	the promise object.

	  Calls	to this	function do not	introduce data	races  with  calls  to
       get_future
	  (therefore they need not synchronize with each other).

Parameters
	  value	- value	to store in the	shared state

Return value
	  (none)

Exceptions
	  std::future_error on the following conditions:

	    * *this has	no shared state. The error code	is set to no_state.
	    *  The shared state	already	stores a value or exception. The error
       code is set to
	      promise_already_satisfied.

	  Additionally:

	  1) Any exception thrown by the constructor selected to copy  an  ob-
       ject of type R.
	  2)  Any  exception thrown by the constructor selected	to move	an ob-
       ject of type R.

Example
       // Run this code

	#include <future>
	#include <iostream>
	#include <thread>

	int main()
	{
	    using namespace std::chrono_literals;
	    std::promise<int> p;
	    std::future<int> f = p.get_future();
	    std::thread([&p]
	    {
		std::this_thread::sleep_for(1s);
		p.set_value_at_thread_exit(9);
	    }).detach();

	    std::cout << "Waiting... " << std::flush;
	    f.wait();
	    std::cout << "Done!\nResult	is: " << f.get() << '\n';
	}

Output:
	Waiting... Done!
	Result is: 9

	  Defect reports

	  The following	behavior-changing defect reports were applied retroac-
       tively to
	  previously published C++ standards.

	     DR	     Applied	to		   Behavior    as    published
       Correct behavior
	  LWG  2098 C++11      it was unclear which exceptions are required to
       made clear
			      be thrown

See also
	  set_value		       sets the	result to specific value
				       (public member function)
				       sets the	result to indicate  an	excep-
       tion while
	  set_exception_at_thread_exit	delivering  the	 notification  only at
       thread exit
				       (public member function)

http://cppreference.com		  2024.06.10	  std::promis...thread_exit(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::promise::set_value_at_thread_exit&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help